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.当发生这种情况时,如果我删除了2个字符,我会看到get_default( )成功,但似乎在ajax数据完成时用ajax数据替换它。
如何阻止这种情况发生?
答案 0 :(得分:1)
感谢您发布get_data
。
您的AJAX调用未被中止的原因是xhr
未在相应的(窗口)范围中定义;因此,xhr.abort()
没有做任何事情(如果你看看你的控制台,很可能会抛出错误。)
请尝试以下方法:
var xhr = false;
function get_data( phrase ) {
xhr = $.ajax({ /* ... etc */
}
其余的应该按原样运作。
答案 1 :(得分:0)
在执行ajax请求之前放一段时间。
function pausecomp(ms) {
ms += new Date().getTime();
while (new Date() < ms){}
}