2015-12-09 47 views
0

以下是我的Ajax調用。Ajax調用不能用於asp.net mvc

$.ajax({ 
    url: '@Url.Action("GetCities", "People")', 
    type: 'GET', 
    dataType: 'JSON', 
    contentType: 'application/json; charset=utf-8', 
    data: {'id' : id }, 
    success: function (cities) { 
     alert('success'); 
    }, 
    error:function(err, result){ 
     alert('error'); 
    } 
}); 

&這是我的操作方法。

public ActionResult GetCities(int id) 
    { 
     var cities = StateDB.GetCities().Where(c => c.StateId == id); 
     return Json(cities, JsonRequestBehavior.AllowGet); 
    } 

當我嘗試訪問此使用http://localhost/People/GetCities/2,它的工作原理, 但它不與上述AJAX調用工作。 它給了我404'找不到'錯誤。 我在這裏做錯了什麼?

+1

您應該刪除'contentType'選項並使用'data:{id:id}'。你在你的應用中使用區域嗎? –

+0

如果可能的話,也顯示路由配置。 –

+1

您的Web API是否具有'/ api'前綴? –

回答

0

問題是外部js文件。 Razor引擎不能使用外部js文件,因此url不正確。這是工作,如果我把相同的代碼在視圖中。感謝所有幫助過我的人。

0

實際上是另一種方式:外部JS文件無法與Razor引擎一起工作(如果您仔細考慮,這是非常明顯的)。如果您在視圖(= Razor引擎涵蓋的視圖)內爲@ Url.Action('','')設置javascript變量,則可以在外部腳本中引用此變量。

內部的視圖:

<script> 
var ajaxUrl = '@Url.Action("GetCities", "People")'; 
</script> 

裏面的外部腳本(假設上面的腳本被引用爲好):

$.ajax({ 
url: ajaxUrl, 
type: 'GET', 
dataType: 'JSON', 
contentType: 'application/json; charset=utf-8', 
data: {'id' : id }, 
success: function (cities) { 
    alert('success'); 
}, 
error:function(err, result){ 
    alert('error'); 
} 

});

這不是最佳實踐(因爲您的外部腳本對可能存在或可能不存在的變量具有依賴性)。

+0

那麼,你有什麼建議來處理這個問題?我不能把所有這些(如果有很多)JavaScript代碼放到視圖中。 – smokingkills

+0

如果您想使用Razor爲您生成URI,那麼您可以做的其他事情不多。例如,你可以聲明一個根變量,你可以在你的外部腳本中使用它來創建剩餘路徑(如url:rootVariable +'People/GetCities'),或者使用某種Javascript輔助方法。 – hbulens