对于具有数据类型jsonp的ajax请求,不会触发ajaxSend事件。如何点火?

时间:2012-11-03 02:51:10

标签: jquery jsonp

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

$('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事件。有没有人知道会解决它的变通方法或补丁?

3 个答案:

答案 0 :(得分:2)

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

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

正如这里所解释的那样:

api.jquery.com/ajaxsend/

答案 1 :(得分:1)

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

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

$.ajax({
    type: 'GET',
    url: 'http://www.example.com',
    dataType: "jsonp"
}).done(function() {
    $('body').trigger('ajaxSend');
});

答案 2 :(得分:0)

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

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