Как правильно использовать AngularJS $ http.post для обновления таблицы MySQLi через PHP?

он никогда не работал для меня иначе, чем с использованием JavaScript, как предлагалось NICCAI в самом первом ответе. Я использую этот подход для масштабирования <div> с помощью Google Maps.

Вот полный пример того, как это сделать (работает в Safari / FireFox / IE / iPhone / Andorid (работает с вращением)):

CSS

body {
  height: 100%;
  margin: 0;
  padding: 0;
}

.header {
  height: 100px;
  background-color: red;
}

.content {
  height: 100%;
  background-color: green;
}

JS

function resize() {
  // Get elements and necessary element heights
  var contentDiv = document.getElementById("contentId");
  var headerDiv = document.getElementById("headerId");
  var headerHeight = headerDiv.offsetHeight;

  // Get view height
  var viewportHeight = document.getElementsByTagName('body')[0].clientHeight;

  // Compute the content height - we want to fill the whole remaining area
  // in browser window
  contentDiv.style.height = viewportHeight - headerHeight;
}

window.onload = resize;
window.onresize = resize;

HTML

<body>
  <div class="header" id="headerId">Hello</div>
  <div class="content" id="contentId"></div>
</body>
5
задан Randall Arms 1 February 2019 в 07:31
поделиться

3 ответа

Вероятно, ошибка в $ .param ().

        data: $.param({ table: table.toString(), column: column.toString(), value: value.toString(), whereColumn: whereColumn.toString(), whereValue: whereValue.toString() })

$. Param () является функцией JQuery.

Проверьте это: AngularJSParamSerializer

Попробуйте без кодирования / декодирования json проверить, работает ли он.

РЕДАКТИРОВАТЬ (комментарий ответчика): «В вашем php попробуйте echo file_get_contents('php://input') ; и в javascript в обратном вызове запроса console.log(response); Чтобы увидеть, если некоторые данные успешно отправлены.

0
ответ дан Randall Arms 1 February 2019 в 07:31
поделиться

Попробуйте не использовать $ .param () для данных. Вы можете отправить объект данных напрямую.

$scope.updatePhp = function(table, column, value, whereColumn, whereValue) {

console.log("Updating. Table: " + table + ", column: " + column + ", value: " + value + ", where: " + whereColumn + ", whereValue: " + whereValue);

$http({
    method: 'POST',
    url: 'update-data.php',
    data: { 
        table: table.toString(),
        column: column.toString(),
        value: value.toString(),
        hereColumn: whereColumn.toString(),
        whereValue: whereValue.toString() 
    },
    headers: { 'Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8' } 
}).then(function successCallback(response) {
    console.log("Success.");
}, function errorCallback(response) {
    console.log("Error.");
});

}
0
ответ дан Bautista Vigier 1 February 2019 в 07:31
поделиться

Проблема была в том, как данные были отформатированы. Вот моя напечатанная переменная $info:

{"table":"achievements","column":"Goal","value":1,"whereColumn":"id","whereValue":"1"}

Строка из file_get_contents('php://input') заключена в фигурные скобки, и каждое значение отделяется запятыми, оба из которых мне пришлось удалить.

Мне также пришлось избавиться от кавычек для каждой пары ключ-значение строки, и, поскольку все, что я хотел, это значение, мне пришлось избавиться от всего, начиная с : и до («ключ», если вы будет).

Вот мой (хотя и хакерский) результат, который отлично сработал:

//PHP posted info
    $info = file_get_contents('php://input');
    $dataArr = explode(',',$data);

    $dCount = 0;
    foreach ($dataArr as $datum) {
        $newDatum = substr($datum, strpos($datum, ":") + 1);
        $newDatum = str_replace(array('}', '{', '"'), '', $newDatum);
        $dataArr[$dCount] = $newDatum;
        $dCount++;
    }

    $table = $dataArr[0];
    $column = $dataArr[1];
    $value = $dataArr[2];
    $whereColumn = $dataArr[3];
    $whereValue = $dataArr[4];
0
ответ дан Randall Arms 1 February 2019 в 07:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: