2012-09-10 42 views
-1

現在在這個問題上困擾了好幾個小時......認爲這與在循環中使用$ .get和它的異步性有關,但我無法弄清楚。

如果通過$ .get行上的螢火蟲添加一個斷點,但是如果我只是運行它,則該代碼無效。

基本上我想遍歷20個隱藏字段在頁面加載時,並基於價值

for (i = 1; i <= 21; i++) { 
     var sMessageTypeID = $('#MessageOrder' + i).val(); 
     //This line calls the Controller and populates the corresponding MessageType Drop down 
     $.get('@Url.Action("GetMessageTypeByMessageTypeID")', { MessageTypeID: sMessageTypeID }, function (data) { 
      $('#MessageTypes' + i).val(data); 
     }); 
    }; 

這裏設置一個下拉列表值控制器代碼

public JsonResult GetMessageTypeByMessageTypeID(long MessageTypeID) 
    { 
     tblMessageType tblMessageType = db.tblMessageTypes.Single(t => t.MessageTypeID == MessageTypeID); 
     return Json(tblMessageType.MessageType, JsonRequestBehavior.AllowGet); 
    } 
+0

你等待測試中服務器的響應? –

+0

是的,服務器正在響應 – Zenacity

回答

0

這下面一行有一個關閉其祖先範圍的匿名函數。

$.get('@Url.Action("GetMessageTypeByMessageTypeID")', { MessageTypeID: sMessageTypeID }, function (data) { 
    $('#MessageTypes' + i).val(data); 
}); 

i的值有最可能的是終止循環(21)的值。

你需要通過獲得按值傳遞的價值,打破封閉...

$.get('@Url.Action("GetMessageTypeByMessageTypeID")', { MessageTypeID: sMessageTypeID }, (function (j) { 
    return function(data) { $('#MessageTypes' + j).val(data); }; 
})(i)); 
+0

其實,修復它 - 不能真的包住我的頭,但爲什麼。但是,謝謝! – Zenacity

+0

@Zenacity,如果這個固定它,它是你的答案,請標記爲這樣。 –

2

除了由@alex關於封閉體所提供的解決方案,我想指出,這是一個非常糟糕的主意,像現在這樣在循環中用AJAX請求敲擊服務器。設想多個用戶訪問此頁面。我建議你在一個AJAX請求發送的ID和調整控制器動作返回一個數組:

var messageIds = []; 
for (i = 1; i <= 21; i++) { 
    messageIds.push($('#MessageOrder' + i).val()); 
} 

// send a single AJAX request to the controller action: 
$.get('@Url.Action("GetMessageTypeByMessageTypeID")', { messageIds: messageIds }, function (data) { 
    for (var i = 0; i < data.length; i++) { 
     $('#MessageTypes' + (i + 1)).val(data[i]); 
    } 
}); 

最後更新控制器操作,因此處理多個ID:

public ActionResult GetMessageTypeByMessageTypeID(long[] messageIds) 
{ 
    var messageTypes = 
     from t in db.tblMessageTypes 
     where messageIds.Contains(t.MessageTypeID) 
     select t.MessageType; 
    return Json(messageTypes.ToList(), JsonRequestBehavior.AllowGet); 
} 
+0

謝謝你。我對循環有點猶豫。只是不知道該怎麼做! – Zenacity

+0

感謝Darin:試圖改變你的解決方案... var稱爲messageIds似乎是通過爲空來控制器。 – Zenacity

+0

我應該補充一點,我可以看到var messageIds在傳遞給控制器​​之前確實包含數據 – Zenacity