如何在 jQuery.post() 中将字符串变量作为数据正确计算


How to properly evaluate a string variable as data in jQuery.post()

我正在尝试将数组作为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);