2
我有一個帶有幾個級聯下拉列表的Web應用程序。所以我使用ajax來更新下一個下拉列表的值。我把JavaScript腳本放在一個單獨的文件中。AJAX路徑不正確
// Code that triggers when there is a change in Activity drop down.
$('#ActivityId').change(function() {
var activityId = $(this).val();
// Empty the Workstation.
$('#WorkstationId').empty();
$('.showhide-workstation').show();
var url = "~/WorkOrderSubmissions/GetWorkstationsByActivityJson";
// AJAX call that re-populate Workstation drop down depending on the Activity selected.
$.ajax({
type: 'POST',
url: url,
dataType: 'json',
data: { activityId: activityId },
success: function (codes) {
$('#WorkstationId').append('<option value=""></option>');
$.each(codes, function (i) {
$('#WorkstationId').append('<option value = "' + codes[i].Value + '">' + codes[i].Text + '</option>');
});
},
error: function (ex) {
$('#WorkstationId').append('<option value=""></option>');
}
}); // END $.ajax() on GetRejectCodesByActivityJson
}); // END $('#ActivityId').change()
代碼在Visual Studio中運行時起作用。當我將其部署到本地Web服務器時,它不起作用。我把它部署到
http://localhost/mea
當我在Chrome中打開開發人員工具,我看到的錯誤。
POST http://localhost/~/WorkOrderSubmissions/GetLinesByWorkorderJson 404 (Not Found)
我試圖給URL更改爲
url = ~/WorkOrderSubmissions/GetLinesByWorkorderJson
url = /WorkOrderSubmissions/GetLinesByWorkorderJson
url = WorkOrderSubmissions/GetLinesByWorkorderJson
沒有他們的工作。我認爲〜應該去到網絡應用程序的根目錄,即http://localhost/mea。
旁註:顯然,你需要正確編碼URL時,呈現在JavaScript(分別經常被問到的問題)以及將JS從HTML中分離出來是一種很好的做法 - 爲此,您需要通過其他方式來傳遞此類url,例如某些HTML元素的'data-'屬性。 –
我分離JS腳本的原因是我有多個級聯下拉菜單。如果我把它放在那裏,它會使_Layout.cshtml變得很長很醜。有沒有辦法將@ Url.Content傳遞給script.js文件? – Eric
是的 - 這是將請求的URL作爲@AlexeiLevenkov提及的相關元素上的'data'屬性提供的模式。 –