对于数据类型为jsonp的ajax请求,不会触发ajaxSend事件。如何使其着火?

问题描述 投票:2回答:3

我正在尝试调试页面上的所有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事件。有谁知道会变的解决方法或补丁?

jquery jsonp
3个回答
1
投票

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

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

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

2
投票

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

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

如此处所解释:

api.jquery.com/ajaxsend/


0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.