我正在尝试将数组作为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);
});
应用.php:
if($_POST['name']) {
echo $_POST['name'];
}
else {
echo 'fail';
}
控制台返回:
{"name":"Bob"}
fail
或者,如果我拼出字符串返回的字符串,事情会按预期运行:
修改后的JavaScript:
$.post('/php/app.php', {"name":"Bob"}, function (result) {
console.log(post);
console.log(result);
});
控制台返回:
{"name":"Bob"}
Bob
这是怎么回事?
或者,如果我拼出字符串返回的字符串
这不是您正在使用的字符串,而是一个$.post
接受的对象。
jQuery使用的默认编码是'application/x-www-form-urlencoded; charset=UTF-8'
,这意味着发送到服务器的实际字符串是name=Bob
,而不是{"name":"Bob"}
。
问题出在这一行:
var post = JSON.stringify(appData);
你实际上想在jQuery的帖子中data:
传递对象。只需删除该行并将传递的变量切换到 appData
var appData = {};
appData['name'] = 'Bob';
$.post('/php/app.php', appData, function (result) {
console.log(post);
console.log(result);
});
尝试{name:"Bob"}
。不在变量名上使用"
。
(对不起,这篇文章很短。我没有指出评论)。
编辑
不要使用var post = JSON.stringify(appData);
使用JSON.stringify(post, appData);