这是一个jQuery错误,还是我错过了什么?

时间:2009-05-01 04:30:28

标签: php jquery ajax

我在AJAX Web应用程序中使用jquery-1.3.2。我使用jQuery ajax $.post()方法向服务器提交请求。

在服务器上,我使用php构建一个数组,然后json_encode答案。然后在客户端上,我使用AJAX post方法的回调函数来处理响应。

一切正常,直到我使用$.post()方法将变量发送到服务器。如果我将变量发送到服务器,我得到的响应是[object Object],因此我无法解析它。我现在有一个解决方法,当发布变量时,我请求HTML响应,然后我解析它。

所以从我的网站获取的代码是:

Jax电话:

$.post("inc/sendfeedback.php", {NAME: name,TYPE: type,EMAIL: email,COMMENT: comment}, function(data) {PostData(data);}, "json");

所以PostData代码如下所示:

function ProcessData(data)
{
    //alert(data);
    var jo = eval("(" + data + ")");
    if(jo.result == "true")
    {
        if(jo.data != "" && jo.element != "")
        {
            $(jo.element).html(jo.data);
        }
    }

    SMessage(jo.error);
}

如果我取消注释上面的代码,则其中包含[alert object]。

如果我从调用中删除Post变量,它可以正常工作。

服务器代码如下所示:

$arr = array ("result" => $result,"data" => $data,"error" => $error,"element" => $element);
echo(json_encode($arr)); 

这是jQuery库的一个错误,我试过1.2版本,但它仍然存在吗?我也搜索jQuery网站,找不到有这个问题的人。

所以我认为我错过了一些东西。但是什么?

3 个答案:

答案 0 :(得分:5)

$.ajax({
      url: "script.php",
      global: false,
      type: "POST",
      data: {NAME: name,TYPE: type,EMAIL: email,COMMENT: comment},
      dataType: "json",
      contentType: "application/json",
      success: function(data){
         alert(data.result);
      }
   }

在调用成功回调之前,不需要eval,jQuery evals / parses它。

eval =纯粹邪恶

http://docs.jquery.com/Ajax/jQuery.ajax#options

答案 1 :(得分:1)

因为您使用的是关联PHP数组,所以json_encode将返回Javascript对象的字符串表示形式,而不是Javascript数组。但是,您仍然可以以与数组类似的方式处理它:

for (var key in data)
{
    var item = data[key];
}

我强烈建议您下载Firefox + Firebug插件并使用console API来调试/转储服务器返回的内容。

答案 2 :(得分:0)

我已经注册,现在无法在没有声望的情况下发表评论到这个帖子,并且看不出任何简单的方法来声称这个问题是我的。

Deviant,你建议使用$ .ajax()方法。我第一次没有为我工作的原因是当服务器代码期待POST数据时我将帖子数据作为JSON对象提交。

所以我修正了我的javascript来正确调用服务器脚本,一切正常。

所以结论是,$ .post()方法中有一个错误。我没有追踪它,但3633行是post方法进行调用。我开始挖掘但是还没有找到问题。

我通过$ .ajax()对相同的服务器脚本以及相同的javascript处理响应的事实来限定这一点,并且一切正常,使用$ .post方法并且我的脚本失败并返回甚至返回对象似乎是一个有效的JSON对象。

感谢帮助人员。现在去除$ .ajax调用的所有$ .post调用。

所有这些的结果可以在www.pygames.net

上看到

干杯 巴蒂尔 a.k.a FrogSkin