GET_DATA()
GET_DATA()
包含以下内容:
var xhr;
...
function get_data( phrase ) {
xhr = function get_data( phrase ) {
$.ajax({
type: 'POST',
url: 'http://intranet/webservice.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, data ) {
$("#div1").append( data.Group + ':' + data.Count + '<br />' );
});
} else {
alert( "results.d does not exist..." );
}
},
error: function(xhr, status, error) {
$('#spanLoading').empty();
var err = eval("(" + xhr.responseText + ")");
alert(err.Message) ;
}
});
}
function get_default() {
$('#div1').empty().append("default stuff goes here");
}
更新2代码
我也尝试过这种方法,它也不起作用,没有错误消息,只是在完成处理时返回文本框有2个字符的结果,即使我在处理完成之前删除了所有内容:
$('#TextBox1').keyup( function() {
if(xhr && xhr.readystate != 4){
xhr.abort();
}
if ($("#TextBox1").val().length >= 2) {
get_data( $("#TextBox1").val() );
} else {
get_default();
}
});
更新1代码:
$('#TextBox1').keyup( function() {
if ($("#TextBox1").val().length >= 2) {
get_data( $("#TextBox1").val() );
} else {
if(xhr)
{
xhr.abort();
}
get_default();
}
});
原始问题:
我有以下代码:
$('#TextBox1').keyup( function() {
if ($("#TextBox1").val().length >= 2) {
get_data( $("#TextBox1").val() );
} else {
get_default();
}
});
这有一个小故障,如果我键入的东西非常快,然后我同样快地删除它,我会在屏幕上看到get_default()
的数据闪烁,然后它会被之前的ajax请求所取代,其中文本框中的值为2,但尚未完成处理。
所以基本上,我认为发生的事情是,当文本框中有2个字符时,ajax请求就会启动,这需要一秒或2秒的时间。当这种情况发生时,如果我删除这两个字符,我会看到get_default()是成功的,但当ajax数据完成时,它似乎会用ajax数据替换它。
我该如何阻止这种情况的发生?
感谢您发布get_data
。
AJAX调用没有中止的原因是xhr
没有在适当的(窗口)范围中定义;因此,xhr.abort()
什么都不做(如果您查看控制台,很可能会抛出一个错误)。
请尝试以下操作:
var xhr = false;
function get_data( phrase ) {
xhr = $.ajax({ /* ... etc */
}
其余部分应按原样工作。
在执行ajax请求之前放置一个时间延迟。
function pausecomp(ms) {
ms += new Date().getTime();
while (new Date() < ms){}
}