我试图将一个数组作为POST数据传递给php,但.post()似乎并不喜欢我的数据字符串变量。
的javascript:
var appData = {};
appData['name'] = 'Bob';
var post = JSON.stringify(appData);
$.post('/php/app.php', post, function (result) {
console.log(post);
console.log(result);
});
app.php:
if($_POST['name']) {
echo $_POST['name'];
}
else {
echo 'fail';
}
控制台返回:
{"name":"Bob"}
fail
或者,如果我拼出stringify返回的字符串,事情就会按照需要行事:
修改了javascript:
$.post('/php/app.php', {"name":"Bob"}, function (result) {
console.log(post);
console.log(result);
});
控制台返回:
{"name":"Bob"}
Bob
这里发生了什么?
答案 0 :(得分:1)
或者,如果我拼出stringify返回的字符串
这不是您正在使用的字符串,而是$.post
接受的对象。
jQuery使用的默认编码是'application/x-www-form-urlencoded; charset=UTF-8'
,这意味着发送到服务器的实际字符串是name=Bob
,而不是{"name":"Bob"}
。
答案 1 :(得分:1)
问题出在这一行:
var post = JSON.stringify(appData);
您实际上希望将对象作为data:
传递给jQuery中的帖子。只需删除该行并将传递的var切换到appData
var appData = {};
appData['name'] = 'Bob';
$.post('/php/app.php', appData, function (result) {
console.log(post);
console.log(result);
});
答案 2 :(得分:0)
试试{name:"Bob"}
。不在变量名上使用"
。
(很抱歉这篇短文。我没有说明评论)。
修改强>
请勿使用var post = JSON.stringify(appData);
使用JSON.stringify(post, appData);