2013-03-08 118 views
1

我被困在簡單的東西上。當我做一個Ajax請求,通過一些如何它沒有足夠的時間來分配給combonews變量:延遲ajax成功,jQuery

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);的時間?

UPDATE:

當我通過結合按鈕單擊事件運行,分配工作正常

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

UPDATE2

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()函數。這適用於點擊,但在其他一些後果不能做(我的意思是不加載消息combonews)

感謝您

+0

是它的工作很好,當我點擊,但我需要它來進行自動 – INgeek 2013-03-08 18:24:37

+0

我說。如果你看着firebug,那麼AJAX查詢是否會在點擊時返回。基本上,ajax是否可以正常工作(減去實際數據的地方)。 – 2013-03-08 18:25:38

+0

你應該使用'JSON.parse()',而不是'eval()'。 – SLaks 2013-03-08 18:26:56

回答

1

@Adam這是我發現的唯一的解決辦法,而我做你的評論作爲答案

爲了簡單起見,請在您的ajax請求之後取出所有代碼,並將其全部放入完整函數中。在ajax請求完成之前,您正在嘗試使用變量「combonews」進行操作。亞當 -

但是相反的complete我用success

感謝大家