在Ajax事件之后调用javascript的其余部分

在Ajax事件之后调用javascript的其余部分,javascript,ajax,Javascript,Ajax,嗨 我正在尝试为输入字段执行自动完成功能。 psuedo代码 var ref,resp//全局变量 $('input').live('keyup',function()){ /*获取输入偏移量,这样一旦通过Ajax调用获得值,列表容器就可以放置在输入的底部*/ ajaxCall(); /*** 在这里,我想编写一个代码来创建一个div,并将带有的值放在div中,并显示在相应的输入字段中。 ***/ }); 函数ajaxCall(){ var ref=新的XMLHttpRequest(); 参考


我正在尝试为输入字段执行自动完成功能。

psuedo代码


var ref,resp//全局变量
$('input').live('keyup',function()){
/*获取输入偏移量,这样一旦通过Ajax调用获得值,列表容器就可以放置在输入的底部*/
ajaxCall();
/***
在这里,我想编写一个代码来创建一个div,并将带有的值放在div中,并显示在相应的输入字段中。
***/
});
函数ajaxCall(){
var ref=新的XMLHttpRequest();
参考open();
ref.readStateChange=函数(){
如果(ref.readyState==4&&ref.status==200)
resp=ref.responseText();
}
ref.send();
}
我在这里遇到的问题是,一旦ajax readyState为4并检索了值,就应该执行ajax调用之后的代码部分。

但是,当readyState为1时(在其他状态之后未调用该代码),将执行该代码,其中的值不会从数据库中检索到。这使我无法显示该列表。

注意:我知道下面的部分可以放在ajaxCall中,但它包含一些变量,可以在此处设置。…


我的问题有意义吗?如果是这样的话,有人能告诉我解决方案吗?

您希望在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.
     ***/
});

i、 e..这部分代码必须以onComplete()方法提供,该方法将使用ajax调用返回的数据作为参数。

您希望在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.
     ***/
});

i、 这部分代码必须采用onComplete()方法,该方法将ajax调用返回的数据作为参数。

您必须在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。

您必须在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。

jQuery在XmlHttpRequest上有一个很好的抽象层,即
$。ajax
function@Alnitak是的,但正如我提到的,ajax调用后必须执行的某些代码包含一些变量和数据,这些变量和数据只能在上一个函数中设置……也不确定您使用的是哪个版本的jQuery,但是
.live()
自1起就被弃用了。4@RamaRaoM这不是问题,您只需要确保这些变量在范围内。在AJAX完成之前,您无法调用需要这些变量的代码。jQuery在XmlHttpRequest上有一个很好的抽象层,即
$。AJAX
function@Alnitak是的,但正如我提到的,ajax调用后必须执行的某些代码包含一些变量和数据,这些变量和数据只能在上一个函数中设置……也不确定您使用的是哪个版本的jQuery,但是
.live()
自1起就被弃用了。4@RamaRaoM这不是问题,您只需要确保这些变量在范围内。在AJAX完成之前,您不能调用需要这些变量的代码。我已经向这个函数传递了两个变量。所以我想传递这个cb,它是否应该作为第一个参数/最后一个参数?@ramaram它可以是您想要的任意一个。只要你是一致的,这没关系。我已经向这个函数传递了两个变量。所以我想传递这个cb,这应该是第一个参数/最后一个参数吗?@ramaroam它可以是你想要的任何一个。只要你始终如一,这并不重要。