加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

处理跨域jsonp调用的jQuery.ajax错误

发布时间:2020-12-16 19:49:03 所属栏目:百科 来源:网络整理
导读:我建立了一个ajax调用(jQuery 1.6.2)的测试用例,如下所示: jQuery( document ).ready( function( $) { var test = function( x ) { $.ajax({ url: 'http://www.someotherdomain.com/test.php',data: { x: x },dataType: 'jsonp',crossDomain: true,success:
我建立了一个ajax调用(jQuery 1.6.2)的测试用例,如下所示:
jQuery( document ).ready( function( $) {
    var test = function( x ) {
        $.ajax({
            url: 'http://www.someotherdomain.com/test.php',data: { x: x },dataType: 'jsonp',crossDomain: true,success: function( data ) { 
                console.log( data.name ); 
            },error: function() { 
                x++; 
                test( x ); 
            }
        });
    };
    test( 1 );
});

而相应的test.php文件如下所示:

if ( 5 > $_GET[ 'x' ] ) {
    header('HTTP/1.1 503 Service Temporarily Unavailable'); die();
} else {
    header( 'content-type: application/x-javascript' );
    echo $_GET[ 'callback' ] . '({"name":"Morgan"})';
}

即使jQuery documentation表示jsonp调用的错误处理程序永远不会被触发,这个脚本的工作原理就如我所想.它会导致对test.php的四个“不成功”调用返回503错误,然后test()递归调用自身递增x,直到ajax调用成功,数据输出到控制台.

所以我上面的测试用例工作,但我的实际代码不起作用,看起来更像以下内容:

jQuery( document ).ready( function( $) {
    var completed = 0;
    var fiftystates; // assume an array of state objects
    var updateState = function( index,state ) {
        var d = index % 5; // for subdomains sub0,sub1,sub2,sub3,sub4
        $.ajax({
            url: 'http://sub' + d + '.mydomain.com/update_state.php',data: { state: state.id },success: function() { 
                completed++; 
                var complete_percent = completed / fiftystates.length * 100;
                $( '#progressbar' ).progressbar( 'value',completed_percent );
            },error: function() {
                updateState( index,state );
            }
        }); // end ajax
    }; // end updateState
    $( fiftystates ).each( updateState );
};

正如你所看到的,这循环了5个不同的子域,实际上只是同一个域的镜像,但是由于update_state.php可能需要长达30秒的时间才能完成,所以这需要25分钟的时间到不到三分钟.问题是服务器的重拨导致某些ajax请求失败,并出现503错误.在我的测试用例中,这个处理方式没有任何问题,但在第二个例子中,错误处理程序似乎没有被调用.

我不知道为什么测试用例按照我的预期工作,第二个没有.有任何想法吗?

应该是这样的格式:
$.ajax({
    type: "POST",url: 'http://servername/WebService.svc/GetData?callback=?',success: function (data) {
       //do stuff
    },error: function (msg,b,c) {
    //alert error
    }
 });

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读