2

我正在尝试调试页面上的所有 jquery 请求,但由于某种原因,数据类型为 jsonp 的请求不会导致我的全局事件触发。我无法控制使用 jsonp 数据类型的 ajax 请求,因此我需要提出一个不需要更改实际 ajax 请求代码的解决方案。但是,我可以对 $.ajax 函数/jquery 库等进行更改。我有一个精简的示例,显示了事件是如何不被触发的。

$('body').bind("ajaxSend",function() {
    alert('global ajaxSend');
});
$.ajax({
    type: 'GET',
    url: 'http://www.example.com',
    dataType: "jsonp",
    success : function(result) {alert('success');},
    error : function(XMLHttpRequest,textStatus,errorThrown) {alert('error');}
});

在该示例中,未触发 ajaxSend 事件。有谁知道会使其着火的解决方法或补丁?

4

3 回答 3

2

我遇到了同样的问题,我解决了它,将绑定更改为:

$( document ).ajaxSend(function() {
    alert('global ajaxSend');
});

正如这里所解释的:

api.jquery.com/ajaxsend/

于 2014-08-18T18:52:24.457 回答
1

jsonp 请求通过在 DOM 中插入脚本标签来工作,因此它不会触发错误处理程序,也可能不会触发您的全局 ajaxSend 处理程序。

没试过,但你总是可以尝试在成功回调中触发事件:

$.ajax({
    type: 'GET',
    url: 'http://www.example.com',
    dataType: "jsonp"
}).done(function() {
    $('body').trigger('ajaxSend');
});
于 2012-11-03T02:58:06.183 回答
0

将 RegisterGlobalEvents 设置为 true 可以触发 ajaxsend,以防您在控制台中看不到任何其他错误(在就绪函数下方添加此错误)

$(document).ready(function() { var objGlobalEvent = new RegisterGlobalEvents(true, ""); ... .. //其他表单提交代码 });

于 2020-02-28T17:05:59.027 回答