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

前端之家收集整理的这篇文章主要介绍了处理跨域jsonp调用的jQuery.ajax错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我建立了一个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
    }
 });

猜你在找的Json相关文章