【发布时间】:2012-03-29 15:29:07
【问题描述】:
我有以下代码给我一个Method POST, Status (canceled) 错误消息:
$(document).ready(function() {
var xhr = false;
get_default();
$('#txt1').keyup( function() {
if(xhr && xhr.readyState != 4){
alert("abort");
xhr.abort();
}
if ($("#txt1").val().length >= 2) {
get_data( $("#txt1").val() );
} else {
get_default();
}
});
function get_data( phrase ) {
xhr = $.ajax({
type: 'POST',
url: 'http://intranet/webservices.asmx/GetData',
data: '{phrase: "' + phrase + '"}',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function( results ) {
$("#div1").empty();
if( results.d[0] ) {
$.each( results.d, function( index, result ) {
$("#div1").append( result.Col1 + ' ' + result.Col2 + '<br />' );
});
} else {
alert( "no data available message goes here" );
}
},
error: function(xhr, status, error) {
var err = eval("(" + xhr.responseText + ")");
alert(err.Message) ;
}
});
}
function get_default() {
$('#div1').empty().append("default content goes here.");
}
});
只要每个 ajax 请求完成,代码实际上就可以工作,但是如果我快速输入 txt1,即在前一个请求完成之前输入下一个字符,我会收到错误消息 Method POST, Status (canceled)。
有人知道为什么会发生这种情况以及如何纠正错误吗?
【问题讨论】:
-
Oleg 可能在这里给出了最好的答案。他的修复应该可以帮助您进一步了解脚本。但是:在阅读您的代码时,我发现您没有为这个问题创建理想的代码。我会为你创建一个答案。
标签: javascript ajax jquery readystate