jquery ajax post - json正在返回,但没有正常工作

时间:2009-12-30 10:20:16

标签: javascript ajax json jquery

我已经为ajax / post / update函数启动了以下框架我想用javascript编写(使用jquery):

$.post("/gallery/resize",
  function (data) {
    alert(data);
    alert(data.complete);
    if (data.complete) {
      alert("done");
    } else {
      alert("blah");
    }
  },
  "json"
);

服务器上的响应脚本是:

$return['complete'] = 'complete';
header('Content-type: application/json');
echo json_encode($return);
exit;

FireBug控制台显示我得到了一个JSON字符串作为响应 - 但data.complete的值是'undefined'。以下是FireBug报告的服务器字符串(我在控制台的XHR显示下的JSON选项卡下也有相应的值/数据对):

{"complete":"complete"}

关于我可能错过的任何指示...

我正在使用本地主机服务器 - 在ubuntu上使用apache - 如果这有所不同?

4 个答案:

答案 0 :(得分:5)

噢,小男孩 - 事实证明我对jQuery的力量有点太信任 - 我在$ .post()方法中缺少一个参数,除非你想指定其他东西,否则它可能是可选的。

奇怪的是,回调在没有设置前面的数据参数的情况下工作 - 但是当你想设置数据类型(并且必须设置数据和回调)时它会变得怪异。

所以 - 我想要的正确代码是:

$.post("/gallery/resize", "",
  function (data) {
    alert(data);
    alert(data.complete);
    if (data.complete) {
      alert("done");
    } else {
      alert("blah");
    }
  },
  "json"
);

答案 1 :(得分:2)

我不确定jQuery如何解析JSON数据,但可能是JSON字符串被错误地评估了。如果在FireBug控制台中输入{"complete":"complete"},则会将其解释为块语句而不是对象文字("complete"属性名称将被评估为标签)。通过评估({"complete":"complete"}){complete:"complete"}或使用JSON.parse上的{"complete":"complete"}来解决此问题。解决此问题的最快方法是从"json"调用中删除$.post参数并解析自己的数据,如下所示:

$.post("/gallery/resize",
  function (data) {
    var obj;
    if (JSON.parse) {
      obj = JSON.parse(data);
    } else {
      obj = eval("(" + data + ")"); // obligatory eval() warning
    }
    if (data.complete) {
      alert("done");
    } else {
      alert("blah");
    }
  }
);

顺便提一下,如果您正在使用Firebug进行调试,请始终尝试使用console.log而不是alert - 它不会中断JS的执行,并且它提供了比{更多信息丰富的JSON序列化{ {1}}

答案 2 :(得分:1)

试试这个:

header('Content-Type: application/json');
$return = array('complete' => 'complete');
echo json_encode($return);
exit;

答案 3 :(得分:1)

JSON数据就像一个javascript数组。所以你应该访问它。

因此,在您提供的代码中,您应该以这种方式访问​​“完成”条目:

data.items[0].complete

这应该可以解决问题。

You may look here获取更多jQuery / JSON信息。