ajax post方法无法在PHP页面中获取数据

时间:2016-02-29 16:16:30

标签: php jquery ajax

我正在尝试将一些数据发送到PHP页面以更新PHP会话变量。我尝试了几个不同的例子,我在这里找到但似乎无法让任何工作。 PHP页面上从未收到数据。

这是我的Javascript / jQuery:

var str, ProductID, sessionValues= [];
ProductID = "1";
str = {"ProductID": ProductID, "State": "UNCHECKED"};
sessionValues.push(str);
ProductID = "2";
str = {"ProductID": ProductID, "State": "CHECKED"};
sessionValues.push(str);

var postObj = {"sessionData": sessionValues};
console.log(postObj);

$.ajax({
    type: 'POST',
    contentType : 'application/json',
    data: {'data': JSON.stringify(postObj)},
    url: 'setSession.php'
}).done(function(response){
        console.log(response);
    }).fail(function(jqXHR, textStatus, errorThrown){
        alert('FAILED! ERROR: ' + errorThrown);
});

这就是我的数据对象:

Console image

然后在PHP方面我得到的是一个错误,我向foreach提供了一个无效的参数。无论我多次重复sessionValues.push(str)我的浏览器总是报告发送528个字节。

<?php 
 $data = json_decode($_POST['data']);
 print_r($data);
 foreach ($data->sessionData as $key => $value) {
    echo "$key => $value";
 }
?>

2 个答案:

答案 0 :(得分:1)

您需要删除contentType : 'application/json',,因为这不是您要发送的内容。

当您正确发送application/json时...将整个对象(而不仅仅是其中的一部分)字符串化,那么$_POST将为空,您必须使用json_decode(file_get_contents('php://input'))访问数据

也没有必要对你的其他对象进行字符串化... jQuery将为你编码,你可以将它作为数组访问

尝试

JS

$.ajax({
    type: 'POST',        
    data: {'data': postObj},
    url: 'setSession.php'
}).done(function(response){

PHP

<?php 
 $data = $_POST['data'];

 foreach ($data['sessionData'] as $key => $value) {
    echo "$key => $value";
 }
?>

答案 1 :(得分:0)

由于某些浏览器会缓存ajax请求,因此它不会按预期响应。因此,明确禁用特定ajax请求的缓存有助于使其工作。尝试修改charlietfl的请求如下:

func doSearch() {
  let filter = GMSAutocompleteFilter()
  filter.type = .address
  GMSPlacesClient.shared().autocompleteQuery("San Jose City Hall", bounds: bound, filter: filter, callback: { results, error in ... }
}

func onResultSelected(_ result: GMSAutocompletePrediction) {
  GMSPlacesClient.shared().lookUpPlaceID(result.placeID, callback: { result, error in ... }
}