2011-11-07 61 views
0

以下JSON電話總是打AJAX錯誤處理程序,我想不通爲什麼:爲什麼這個基本的json調用不起作用?

$.ajax({ 
    type: "GET", 
    url: '<%= Url.Action("MyTest", "Detail") %>', 
    dataType: "json", 
    error: function (xhr, status, error) { 
     alert(xhr + " | " + status + " | " + error); 
    }, 
    success: function (json) { 
     alert(json); 
    } 
}); 

我得到的是Failed to load resource: the server responded with a status of 500 (Internal Server Error) http://localhost:4497/Detail/MyTest?_=1320681138394

當我設置一個控制器中的斷點,我可以看到它已經到達,所以我不確定請求在哪裏下降。下面是在DetailController行動:

Function MyTest() As JsonResult 
    Return Json("Hello") 
End Function 

任何想法?

+0

當直接訪問'http:// localhost:4497/Detail/MyTest'時會發生什麼? – Sorpigal

+0

直接在您的Web瀏覽器中訪問「http:// localhost:4497/Detail/MyTest?_ = 1320681138394」以獲取有關該異常的更多信息。 –

回答

3

jQuery錯誤處理程序被激發,因爲它無法將返回的頁面解析爲有效的JSON。由於您收到500個內部服務器錯誤,該頁面很可能不包含有效的JSON。

加載該頁面在瀏覽器中,並修復它,直到它給出了有效的JSON:

http://localhost:4497/Detail/MyTest 

它在瀏覽器,給有效的JSON後,嘗試了jQuery AJAX調用。

我沒有,甚至VB.NET的基本功能的想法,但你可以使打印在http://localhost:4497/Detail/MyTest的唯一事情是這樣的:

print('{"message":"hello"}'); 

如果該頁面輸出的唯一的事情是{"message":"hello"}然後json錯誤處理程序不會觸發

+2

賓果!通過瀏覽器加載該URL顯示了真正的錯誤消息:「此請求已被阻止,因爲在GET請求中使用此信息時,可能會向第三方網站泄露敏感信息。要允許GET請求,請將JsonRequestBehavior設置爲AllowGet。」我所要做的只是在控制器操作中返回「Json(」Hello「,JsonRequestBehavior.AllowGet)」,它工作得很好。謝謝! – gfrizzle