Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 延迟ajax成功,jQuery_Javascript_Jquery - Fatal编程技术网

Javascript 延迟ajax成功,jQuery

Javascript 延迟ajax成功,jQuery,javascript,jquery,Javascript,Jquery,我被一件简单的事情缠住了。当我发出ajax请求时,有些人认为它没有足够的时间分配给combonews变量: jQuery.ajax({ type: "POST", url: "People.aspx/LoadComboNews", data: "{\"id\":" + usrid + "}", contentType: "application/json; charset=utf-8",

我被一件简单的事情缠住了。当我发出ajax请求时,有些人认为它没有足够的时间分配给
combonews
变量:

jQuery.ajax({
            type: "POST",
            url: "People.aspx/LoadComboNews",
            data: "{\"id\":" + usrid + "}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (msg) {
                // Replace the div's content with the page method's return.
                combonews = '';
                setTimeout(function () { combonews = eval(msg.d); }, 500);
                //combonews = eval(msg.d);

            }
    });
试图添加setTimeout,如图所示,但当我想提醒
combonews
时,它仍然为空。 当我发出警报
msg.d
时,它总是准备好数据。 是否有办法延长
combonews=eval(msg.d)的时间要执行吗

更新:

当我通过绑定到button click事件来运行它时,分配工作正常

---------------------------------------

更新2

function lcombo() {
    jQuery('#combostart ~ option').remove();
    //setTimeout((function () {
        jQuery.ajax({
            type: "POST",
            url: "People.aspx/LoadComboNews",
            data: "{\"id\":" + usrid + "}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            complete: function (msg) {
                // Replace the div's content with the page method's return.
                combonews = '';
                //setTimeout(function () { combonews = eval(msg.d); }, 500);
                combonews = JSON.parse(msg.d);

            }
        });
        //combonews = eval(combonews);
        //alert(combonews);
        jQuery(".chzn-select").chosen();
        jQuery(".chzn-select-deselect").chosen({ allow_single_deselect: true });
        var str = "";
        if (combonews.length > 0)
            for (var i in combonews) {
                str += "<option value='" + combonews[i][0] + "'>" + combonews[i][1] + "</option>";
            }
        jQuery("#combooptions").append(str);
        jQuery("#combooptions").val(draftid);
        jQuery("#combooptions").trigger("liszt:updated"); 
}
函数lcombo(){
jQuery('#combostart~option').remove();
//setTimeout((函数(){
jQuery.ajax({
类型:“POST”,
url:“People.aspx/LoadComboNews”,
数据:“{\“id\”:“+usrid+”}”,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
完成:功能(msg){
//用page方法的return替换div的内容。
combonews='';
//setTimeout(函数(){combonews=eval(msg.d);},500);
combonews=JSON.parse(msg.d);
}
});
//combonews=eval(combonews);
//警讯(综合新闻);;
jQuery(“.chzn select”).selected();
jQuery(“.chzn select deselect”).selected({allow\u single\u deselect:true});
var str=“”;
如果(combonews.length>0)
for(combonews中的变量i){
str+=“+combonews[i][1]+”;
}
jQuery(“#combooptions”).append(str);
jQuery(“#combooptions”).val(draftid);
jQuery(“#combooptions”).trigger(“liszt:updated”);
}
然后我加载lcombo()函数。该函数在单击时起作用,但在其他一些情况下不起作用(我的意思是不将消息加载到combonews)


谢谢你

@Adam这是我找到的唯一解决方案,我将发表你的评论作为回答


为了简单起见,在ajax请求完成后获取所有代码,并将其全部放在完整的函数中。在ajax请求完成之前,您正试图使用变量“combonews”进行一些操作

但是我没有使用
complete
而是使用
success


谢谢大家

@Adam这是我找到的唯一解决方案,我将发表您的评论作为回答


为了简单起见,在ajax请求完成后获取所有代码,并将其全部放在完整的函数中。在ajax请求完成之前,您正试图使用变量“combonews”进行一些操作

但是我没有使用
complete
而是使用
success


谢谢大家

是的,当我单击时,它确实可以正常工作,但我需要自动执行。您在哪里调用警报?为了简单起见,请在ajax请求后获取所有代码,并将其全部放入完整的函数中。您试图使用变量“combonews”执行某些操作在您的ajax请求完成之前。另外,不要听下面的内容。将其更改回
success
。无论您的ajax请求从服务器获得200 OK响应,complete都将启动。如果@Adam将代码移到success事件处理程序中的解决方案起作用(我相信它会起作用),它应该被移动到一个答案并标记为正确。是的,当我单击时它工作正常,但我需要它自动执行。您在哪里调用警报?为了简单起见,请在ajax请求后获取所有代码,并将其全部放在完整的函数中。您试图使用变量“combonews”执行某些操作在您的ajax请求完成之前。另外,不要听下面的内容。将其更改回
success
。无论您的ajax请求从服务器获得200 OK响应,complete都将启动。如果@Adam将代码移到success事件处理程序中的解决方案起作用(我相信它会起作用),则应移动到答案并标记为正确。