1

やあ

入力フィールドのオートコンプリート機能を実行しようとしています。

疑似コード

<input type="text"/>

<script>
 var ref,resp;//Global Variables

$('input').live('keyup',function(){
   /* Get the input offset, so that list container can be palced at the bottom of the input once get the values through Ajax call */

  ajaxCall();

 /***
  Here I want to write a code to create a div and place the values with in the div and show at the respective input field.
 ***/

});

function ajaxCall(){
var ref  = new XMLHttpRequest();
  ref.open();
  ref.readStateChange = function(){
    if(ref.readyState == 4 && ref.status ==200)
       resp = ref.responseText();
  }
  ref.send();
}

</script>

私がここで得ている問題は、ajax readyState が 4 で値が取得されたら、ajax 呼び出しの後のコードの部分を実行する必要があることです。

しかし、readyState が 1 (他の状態の後に呼び出されていない) の場合にそのコードが実行され、データベースから値が取得されません。リストを表示できません。

:以下の部分をajaxCallに入れることができることは知っていますが、その場所に設定できる変数がいくつか含まれています....

私の問題は理にかなっていますか?もしそうなら、誰かが私に解決策を教えてもらえますか...

4

2 に答える 2

1

AJAX コールバック中に、AJAX 呼び出しの結果に依存する関数を呼び出す必要があります。それがまさにその通りです:

function ajaxCall(callback) {
    var ref = new XMLHttpRequest();
    ref.open();
    ref.readStateChange = function() {
        if (ref.readyState === 4 && ref.status === 200) {
             resp = ref.responseText();
             callback.call(null, ref.responseText); // invoke the callback here
        }
    }
    ref.send();
}

その後:

ajaxCall(function(resp) {
    // handle "resp" here
});

とは言っても、車輪の再発明はしないでください。保守が難しく、ブラウザー間で移植できないコードになってしまいます。このような AJAX コードを完全に無茶苦茶にするライブラリはたくさんあります。jQueryを使用しています。

于 2012-12-20T11:35:21.083 に答える
0

ajax呼び出しの完了後に実行する予定のコードは、コードのonSuccess()またはonComplete()メソッドに配置する必要があります。

ajaxCall(function(resp) {


    /***
      Here I want to write a code to create a div and place the values with in the div and show at the respective input field.
     ***/
});

すなわち。コードのこの部分はonComplete()メソッドに含まれている必要があり、ajax呼び出しによってパラメーターとして返されるデータが含まれます。

于 2012-12-20T11:33:47.123 に答える