我正在尝试一些东西并使用json和javascript填充下拉列表由于某种原因我在尝试填充时遇到控制台错误
我正在使用Scripts/jquery-2.0.2.js
这是错误:
无法加载资源:服务器响应状态为404(未找到)
POST // localhost:9819 / Home / Home / Test 404(Not Found) jquery-2.0.2.js:7858发送jquery-2.0.2.js:7858 jQuery.extend.ajax jquery-2.0.2.js:7314 RetrieveData索引:45(匿名函数) 索引:64 jQuery.event.dispatch jquery-2.0.2.js:4692 elemData.handle
这是查看代码:
<script>
$(document).ready(function () {
var Load = false;
function RetrieveData() {
if (Load == false) {
Load = true;
$.ajax({
url: <%= Url.Action("Test", "Home") %>
data: "{}",
dataType: "json",
type: "POST",
contentType: "application/json",
success: function (data) {
$("#selectMe").html(data);
Load = false;
},
error: function (data, status, jqXHR) {
alert("Error: " + data);
Load = false;
}
});
}
}
$(document).on("click", "#test", function () {
RetrieveData();
});
});
</script>
<input type="submit" id="test" />
<select id="selectMe"></select>
控制器:
public string GenerateHTMLforDropDownList(Dictionary<string, string> myData)
{
string HTMLString = "";
foreach (KeyValuePair<string, string> k in myData)
{
HTMLString += "<option value=\"" + k.Key + "\">" + k.Value + "</option>";
}
return HTMLString;
}
[HttpPost]
public JsonResult Test()
{
Dictionary<string, string> myData = new Dictionary<string, string>();
myData.Add("0", "Mike");
myData.Add("1", "Mark");
myData.Add("2", "Karl");
myData.Add("3", "Rhona");
return Json(GenerateHTMLforDropDownList(myData), JsonRequestBehavior.AllowGet);
}
任何有关如何解决此问题的帮助
答案 0 :(得分:1)
如错误所示,找不到资源。查看错误中的URL:
http://localhost:9819/Home/Home/Test
假设您没有做更多自定义操作,如果您在Test
控制器上执行了Home
操作,则 应该
http://localhost:9819/Home/Test
另请注意您如何在代码中指定网址:
url: "Home/Test"
如果您当前位于http://localhost:9819/Home/Anything
,则该相对网址表示在当前资源的“子目录”(使用松散的单词)中查找名为Test
的资源。所以这是你的问题。
不要像这样手动指定URL,而是使用MVC中的Url.Action
方法。像这样:
url: '@Url.Action("Test", "Home")'
这将从服务器端代码生成一个完全限定的URL,无论您当前的上下文在哪里,因此您不必根据当前URL或类似的内容进行调整。
答案 1 :(得分:0)
我还没有在MVC中这样做,但是我已经在Web窗体中做过无数次了,看起来你的URL可能就是问题......
<强> //本地主机:9819 /家庭/家庭/测试强>
在您的ajax调用中,您应该调整此行...
url: "Home/Test"
让它看起来像......
url: <%= Page.ResolveUrl("~/Home/Test.asmx") %>
很抱歉,如果这不是MVC的基础。
答案 2 :(得分:-1)
您需要将按钮类型更改为“按钮”而不是提交,因为这是ajax调用