2

すべて、私は次のコードを持っています。これは基本的に、DOMのロード時にいくつかの検索語をロードする関数です。

window.myAutocompleteFunction = function(){
return ['Test Saying','sit amet consectetur adipiscing','elit Nulla et justo'];
};

これは私のライブ検索では問題なく機能し、正しく更新されます。ただし、データベースの情報に基づいてこれらの値を入力しようとしています。.get関数を使用して戻り値を設定するようにコードを更新しようとしましたが、次のように表示しようとしました。

window.myAutocompleteFunction = function(){
$.get('http://localhost/website/load_users.php', function(data) {
    alert(data);
    return [data];
});
};

ユーザーを読み込もうとしますが、アラートでは手動で入力した場合と同じですが、何らかの理由で検索を実行しても機能しません。私のファイルから同じ結果を取得し、検索を同じように機能させる方法はありますか?

編集:現在、load_users.phpファイルにあるのは次のとおりです。

「TestSaying」、「sit amet consectetur adipiscing」、「elitNullaetjusto」

これにデータベース値を入力してみますが、今はこれを機能させようとしています。

別の編集:私はまた、それが機能するかどうかを確認するために、次のようなコードを作成しようとしました:

window.myAutocompleteFunction = function(){
jQuery.get('http://localhost/okyne/load_users.php', function(data) {
    alert(data);
    return ['Test Saying','sit amet consectetur adipiscing','elit Nulla et justo'];
});
};

これも機能しないので、なぜ機能しないのかわかりません。これまでのところ、私が提供した最初のコードスニペットだけが機能します。

あなたが提供できるどんな助けも大歓迎です!

4

2 に答える 2

1

そのような値を返すことはできませ$.getん。非同期で実行され、ブラウザがその評価を開始し、次に進み、そのfnで終了するためです。完了する前に。また、その特定returnは、オートコンプリート関数ではなく、内部の成功コールバック関数を対象とします。データをロードし、成功コールバックでその関数を作成する必要があります。

これがモックアップの例です。http://jsfiddle.net/Nf2UD/

注setTimeoutを使用してajax呼び出しが終了したことを確認しましたが、オートコンプリートを使用する前に、ページの初期化中にrandomFnを呼び出して実行されたことを確認する必要があります。これはいくつかの方法で確認できます。ステータスを追跡するグローバル変数を使用し、オートコンプリート関数が未定義かどうかを確認します。実際、これは非同期メソッドのポイントではありませんが、私にとっては何でも機能します。推測してみて。

function() randomFn {
    $.get('http://localhost/website/load_users.php', function(data) {
        alert(data);
        window.myAutocompleteFunction = function(){ return [data]; };
    });
};
于 2012-07-11T03:00:09.423 に答える
0

これを試して:

    function getScript(url,success){
        var script=document.createElement('script');
        script.src=url;
        var head=document.getElementsByTagName('head')[0],
        done=false;
        script.onload=script.onreadystatechange = function(){
        if ( !done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete') ) {
        done=true;
        success();
        script.onload = script.onreadystatechange = null;
        head.removeChild(script);
        }
        };
        head.appendChild(script);
    }

    getScript('http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js',function(){

        /* YOUR CODE GOES HERE AND IS EXECUTED AFTER JQUERY LOADS */

    });
于 2012-07-11T02:41:51.790 に答える