【问题标题】:jQuery ajax success event Strangely not working on ajaxSetupjQuery ajax 成功事件奇怪地不适用于 ajaxSetup
【发布时间】:2012-04-17 15:00:53
【问题描述】:

背景:

  • 使用 jQuery 1.7 客户端
  • PHP 服务器端
  • 通过 json_encode php 函数使用 json 响应
  • content-type 标头正确,以下任何一种都有效:text/plain、text/x-json、application/json。
  • 我的 php 代码没有抛出任何错误
  • 正在开发 Firefox 11
  • 我正在使用 js 控制台和其他 Web 的开发人员工具
  • HTTP/1.1 200 正常

在这段 Javascript 代码中,success 事件从未被触发:

$.ajaxSetup({cache:false,
        success:function(d) {
            console.log("ok from setup with data "+d.toSource())
        },
        complete:function(xhr,ts){
            console.log("Ajax finished reponse:"+xhr.responseText)
        },
        error:function(jqXHR, textStatus, errorThrown){
            console.log("Error")
        }
});
$.getJSON("test2.php",{},function(data){
    //some code here
});

当我这样做时,它会起作用:

$.ajaxSetup({cache:false,                
        complete:function(xhr,ts){
            console.log("Ajax completado con:"+xhr.responseText)
        },
        error:function(jqXHR, textStatus, errorThrown){
            console.log("Error")
        }
});
$.getJSON("test2.php",{},
     function(data){
            //some code here
     }).success(function(d){
            console.log("success applied directly, data "+d.toSource())
        }
);

在这两种情况下,总是会触发 complete 事件,而永远不会触发 error 事件。 但是,在第二个代码中触发了成功。 显然.get() 方法是一样的。

PHP 代码:

<?php header("Content-Type:application/json;charset=utf-8");
    //or whatever text/x-json text/plain, even text/html, jquery do the dirty job
echo json_encode(array("stat"=>"1")) ?>

我的目标:

  1. 我想向所有 ajax 请求触发相同的成功事件
  2. 我想在我的成功事件中使用请求返回的 json data,如果可能的话,不将原始 jqXHR responseText 转换为 json 再次

问题很奇怪,有什么想法吗?


我阅读了所有这些问题:

而且我很确定它们都不是我的问题。

【问题讨论】:

    标签: javascript jquery ajax


    【解决方案1】:

    查看 ajaxSetup 文档:http://api.jquery.com/jQuery.ajaxSetup/

    注意:全局回调函数应设置各自的 全局 Ajax 事件处理程序方法——.ajaxStart()、.ajaxStop()、 .ajaxComplete()、.ajaxError()、.ajaxSuccess()、.ajaxSend()——而不是 在 $.ajaxSetup() 的选项对象中。

    我认为这就是你的问题。

    更新

    如果您希望您的 ajax 处理程序对于页面上的 任何 ajax 请求是全局的,请执行以下操作:

    $(document).ajaxSuccess(function(d){
        console.log("ok from setup with data "+d.toSource());
    });
    

    【讨论】:

    • 好的,我明白了,但我真正想要的是向所有 ajax 请求触发相同的成功事件以执行某些操作,但不向每个对象添加 ajaxSuccess()。谢谢你的回答。
    • 试试这个:$(document).ajaxSuccess(...)
    • 另外,您使用的是什么浏览器? .toSource 仅限 Gecko。
    • 是的,这可以是一个解决方案,但是有一个问题我没有很好地说明我的需求,我必须对返回的 json 对象做一些事情
    • 优秀的丹!我在该网站上找到了 Ben Kojabash 的评论,他完全正确,.ajaxSuccess 实际上作为数据的第 4 个参数接收,但官方 jquery API 中没有记录。无需使用 $.httpData() 或 $.parseJSON()。谢谢
    猜你喜欢
    • 2012-05-21
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多