2013-05-08 25 views
1

我正面臨AJAX代碼的一些問題。我正在爲我們的項目使用MVC3。我的要求是頁面加載時使用AJAX綁定下拉值。加載頁面時會發生什麼,AJAX請求會正確發送到控制器,並返回到AJAX函數並在下拉列表中綁定確切的值。但有時(頁面刷新或第一次加載時)其未綁定檢索值。而是顯示其默認值。請看我的代碼,並建議我在哪裏做錯了。這個JQuery AJAX代碼有什麼問題

編輯:即使我試圖使用async屬性爲false。它根本沒有發送到控制器獲取數據的操作方法。

代碼

$.ajax({ 
      type: "POST", 
      contentType: "application/json; charset=utf-8", 
      url: '@Url.Action("GetUser", "Invoices")', 
      data: "{'id':" + JSON.stringify(currval) + "}", 
      dataType: "json", 
      async: true, 
      success: function (data) { 
       $("#User-" + curr).select2("data", { id: data.Value, Name: data.Text }); 
       $(this).val(data.Value); 
      } 
     }); 

感謝,

+0

我相信,但事實並非'this'上下文綁定到成功函數中的'xhr'對象? – shakib 2013-05-08 13:26:53

+2

在發送ajax請求之前是否在等待document.ready事件觸發?如果你不是,那麼你完全有可能遇到ajax請求在DOM準備好之前完成的競爭條件,並且沒有要綁定數據的元素。 – rossisdead 2013-05-08 15:38:15

回答

1

比方說,你的行動方法如下

public JsonResult hello(int id) 
{ 
    return Json(new { Success = true }, JsonRequestBehavior.AllowGet); 
} 

和JQuery應該像下面

<script language="javascript" type="text/javascript"> 
    $(document).ready(function() { 
     var currval = 2; 
     $.ajax({ 
      url: 'URl', 
      async: true, 
      type: 'POST', 
      contentType: 'application/json; charset=utf-8', 
      data: JSON.stringify({ id: currval }), 
      success: function (data) { 
      } 
     }); 
    }); 
</script> 
1

您不正確聲明你data財產。試試這個:

data: { id: currval }, 
+0

怎麼樣?他正確地將它傳遞給一個字符串。 – Kenneth 2013-05-08 13:29:52

+0

@Kenneth他會使用他的代碼將它作爲JSON字符串傳遞,而不是作爲實際值(匹配'public ActionResult GetUser(int id)')。 – mattytommo 2013-05-08 13:31:19

+0

這可能是他想要的......正如他所說的:「有時它不是檢索值的綁定。」這意味着他正確地檢索了這個值,所以在接收端肯定有什麼問題,他發送的內容應該沒問題 – Kenneth 2013-05-08 13:33:58