我有一个示例代码:
<input type="text" class="" id="key" name="key" value="ex: IPhone 4S"
onfocus="cleanPhoneBox(this);"
onblur="fillPhoneBox(this);"
onkeyup="javascript:search_phones('demo.php');">
和javascript
function cleanPhoneBox( obj ) {
if( obj.value == obj.defaultValue ) {
obj.value = '';
obj.className = '';
}
}
function fillPhoneBox( obj ) {
if( obj.value == '' ) {
obj.value = obj.defaultValue;
obj.className = 'search_tool_tip';
}
}
var lasttimeout = 0;
function search_phones(ajaxdomain) {
search_string = $('#key').val();
if(search_string.length >= 2) {
if( lasttimeout ) clearTimeout(lasttimeout);
lasttimeout = setTimeout('search_phones_call(\"'+ajaxdomain+'\", \"'+search_string+'\")', 300 );
}
}
function search_phones_call( ajaxdomain, search_string ) {
$('#searchPhoneResultsContainer').empty();
$.ajax({
type:"GET",
url : ajaxdomain + '?jsoncallback=?',
data: {
action: "dialog",
type: "searchPhonesJSON",
query: search_string,
itemsCount: 100,
nocache: 96316638
},
dataType:'json'
});
}
当我用关键字搜索时:“iphone 4
”是结果调用json ajax OK,但是当delete keyword
和search again
结果无法调用ajax json回调时,如何修复它
答案 0 :(得分:0)
您正在动态构建一个调用Javascript setTimeout
命令的eval
函数调用字符串。出于这种原因,最好避免使用setTimeout
的字符串参数。
尝试让JQuery管理回调:
$.ajax({
type:"GET",
url : ajaxdomain,
cache : false,
data: {
action: "dialog",
type: "searchPhonesJSON",
query: search_string,
itemsCount: 100
},
dataType:'jsonp'
})
.then(function(data)
{
// what you want to do with the server response goes here
});
但是,如果您只想修复setTimeout
代码,请使用匿名函数:
lasttimeout = setTimeout(function()
{
search_phones_call(ajaxdomain, search_string)
}, 300);