处理跨域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 } }); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |