-1

サンプルコードがあります:

<input type="text" class="" id="key" name="key" value="ex: IPhone 4S" 
    onfocus="cleanPhoneBox(this);" 
    onblur="fillPhoneBox(this);" 
    onkeyup="javascript:search_phones('demo.php');">

そしてジャバスクリプト

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 コールバックを呼び出せない場合の修正方法

4

1 に答える 1

0

setTimeoutJavascriptの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);
于 2013-02-02T04:13:16.803 に答える