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

时间:2016-02-02 01:01:09

标签: javascript php jquery

我试图将一个数组作为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

这里发生了什么?

3 个答案:

答案 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);