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.
     ***/
});

IE。这部分代码必须在 onComplete() 方法中,它将 ajax 调用返回的数据作为参数。

于 2012-12-20T11:33:47.123 回答