我正在尝试将一些数据发送到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);
});
这就是我的数据对象:
然后在PHP方面我得到的是一个错误,我向foreach提供了一个无效的参数。无论我多次重复sessionValues.push(str)
我的浏览器总是报告发送528个字节。
<?php
$data = json_decode($_POST['data']);
print_r($data);
foreach ($data->sessionData as $key => $value) {
echo "$key => $value";
}
?>
答案 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 ... }
}