【问题标题】:Is this a jQuery bug, or am I missing something?这是一个 jQuery 错误,还是我错过了什么?
【发布时间】:2009-05-01 04:30:27
【问题描述】:

我在 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);
}

如果我取消注释上面的代码,警报中包含 [object Object]。

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

服务器代码如下所示:

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

这是 jQuery 库的错误吗,我在 1.2 版本中尝试过,但它仍然存在?我也搜索了 jQuery 站点,但找不到遇到此问题的人。

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

【问题讨论】:

    标签: php jquery ajax


    【解决方案1】:
    $.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);
          }
       }
    

    无需评估,jQuery 在调用成功回调之前对其进行评估/解析。

    eval = 纯粹的邪恶

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

    【讨论】:

    • eval 并不是纯粹的邪恶。纯的有点太慢了。
    • 他不需要那个讨厌的会话 cookie ;)
    • 我刚刚实现了代码并得到了完全相同的错误。即:使用我发布的方法在元素列表([object Object])之后缺少],当您不发布任何变量时,此错误就会消失。通常我会认为 php json_encode 函数有问题,但是将变量发布到服务器对此函数没有影响,因此没有意义。
    • 发布 JSON 输出,以便我可以尝试帮助,很难做到盲目
    • 好的,这是来自服务器的响应数据:{"result":"true","data":"


      谢谢您的反馈。如果我们需要跟进您的 cmets,我们将使用提供的电子邮件和姓名。

      Ping You Games 团队。
      ","error" :"Feedback Sent Successfully","element":".Menu7"} 据我所知,该对象没有任何问题。我相信在 jquery 库中,因为当我不发布任何变量时,这就是我的其他 json 对象返回的确切格式。库中的错误与缺少 ] 有关。我会找到错误的。
    【解决方案2】:

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

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

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

    【讨论】:

    • 是的,我就是这么做的。让我感到震惊的是,如果我不在对服务器的调用中发布变量,一切正常。只有当我将变量作为原始 ajax 发布调用的一部分发布时,它才会中断。我觉得这个 bug 隐藏在 jquery 为调用创建的对象中。我还没有把 jquery 调用拆开来看看,因为我想我会先在这里问。
    • 发布的数据是什么样的?它是一个 json 编码的对象还是一个标准的 URL 编码的 Post (NAME=name&TYPE=type&EMAIL=email&COMMENT=comment)?
    • 帖子数据作为编码帖子发送。这是 xhr.send(s.data) 的结果,它是 jquery-1.3.2.js 的第 3633 行 NAME=Shane+Speering&TYPE=general&EMAIL=shane%40pingyou.net&COMMENT=adasdasddad+asdadasdasd+asdasdasdasdasd 这是我所期望的使用 $.post() 根据文档将数据发布到服务器。该函数的最后一个选项是选择响应格式。我选择的响应是 json,在上面我对 Devaint 的评论中,您可以看到它返回的 json 对象。现在要查找错误是否在 jquery 脚本中。
    【解决方案3】:

    我已经注册了,现在不能在没有声誉的情况下将 cmets 发布到这个线程中,并且看不到任何简单的方法来声明这个问题是我的。

    Deviant,您使用 $.ajax() 方法的建议奏效了。第一次对我不起作用的原因是,当服务器代码需要 POST 数据时,我将 post 数据作为 JSON 对象提交。

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

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

    我通过以下事实来限定这一点似乎是一个有效的 JSON 对象。

    感谢各位的帮助。现在去删除我对 $.ajax 调用的所有 $.post 调用。

    这一切的结果可以在 www.pygames.net 上看到

    干杯 谢恩 又名 FrogSkin

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-13
      • 1970-01-01
      • 1970-01-01
      • 2012-02-07
      • 2012-10-14
      • 1970-01-01
      • 2011-01-03
      • 1970-01-01
      相关资源
      最近更新 更多