2009-09-23 101 views
6

我正在學習一個測試項目,包括SubSonic和jQuery,學習asp.net mvc。getJSON回調不觸發

我遇到的問題是,每次我想返回的東西不僅僅是一個簡單的字符串,就像一個Json對象一樣,我會因爲回調似乎沒有觸發或回退失敗而受阻。

我的方法得到的作業列表數據庫:

[AcceptVerbs(HttpVerbs.Get)] 
    public JsonResult GetAllJobs() 
    { 
     var db = new JamesTestDB(); 
     var jobs = from job in db.Jobs 
        select job; 

     return Json(jobs.ToList()); 
    } 

而且我的JavaScript調用它:

function updateJobList() { 
     var url = '<%= Url.Action("GetAllJobs", "Home") %>'; 

     $.getJSON(url, null, function(data, status) { alert("Success!"); }); 
    } 

我和GET,POST各地發揮和利用雙方的getJSON內聯和外界函數定義成功和失敗。似乎沒有什麼工作,但代碼肯定是在進行Ajax調用,而不是觸發回調。

+0

這是一個跨域getJSON(即JSONP)還是同一個域? – seth 2009-09-23 22:35:14

回答

0

jQuery有一個error handler,你必須綁定,如果你想看到的錯誤:

$("#msg").ajaxError(function(event, request, settings){ 
    $(this).append("<li>Error requesting page " + settings.url + "</li>"); 
}); 
0

你試過:

$ .getJSON(URL,功能(數據,狀態){警報( 「Success!」);});

而且,查詢的網址是做正確解析:

警報(URL);

在呼叫之前檢查它是否正確。

然後檢查Firefox中Firebug的控制檯窗口上的響應。

0

問題在於我回來的地方。似乎將匿名類型推入Json()似乎導致它以某種方式混亂。通過定義一個簡單的類並將值推入到它的新實例中,我可以正確地返回它。

12

這裏是解決方案!

因此,原來我已經一年多了做完全相同的方式:

public JsonResult SaveData(string userID, string content) 
{ 
    var result = new { Message = "Success!!" }; 

    return Json(result); 
} 

於是,我開始做一個新項目,我開始以同樣的方式。那麼,區別?第一個是MVC 1.0,而我的新MVC 2.0。那有什麼區別?您必須允許JSON GET請求:

public JsonResult SaveData(string userID, string content) 
{ 
    var result = new { Message = "Success!!" }; 

    return Json(result, JsonRequestBehavior.AllowGet); 
}