Javascript 用json填充下拉列表
我正在尝试一些东西,并用json和javascript填充下拉列表,因为某些原因,我在尝试填充时遇到了控制台错误 我正在使用Javascript 用json填充下拉列表,javascript,ajax,asp.net-mvc,json,Javascript,Ajax,Asp.net Mvc,Json,我正在尝试一些东西,并用json和javascript填充下拉列表,因为某些原因,我在尝试填充时遇到了控制台错误 我正在使用Scripts/jquery-2.0.2.js 这就是错误: http://localhost:9819/Home/Home/Test 加载资源失败:服务器响应状态为404(未找到) POST//localhost:9819/Home/Home/Test 404(未找到) jquery-2.0.2.js:7858发送jquery-2.0.2.js:7858 jquery.
Scripts/jquery-2.0.2.js
这就是错误:
http://localhost:9819/Home/Home/Test
加载资源失败:服务器响应状态为404(未找到)
POST//localhost:9819/Home/Home/Test 404(未找到)
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>
$(文档).ready(函数(){
var负载=假;
函数RetrieveData(){
if(Load==false){
负载=真;
$.ajax({
网址:
数据:“{}”,
数据类型:“json”,
类型:“POST”,
contentType:“应用程序/json”,
成功:功能(数据){
$(“#selectMe”).html(数据);
负载=假;
},
错误:函数(数据、状态、jqXHR){
警报(“错误:+数据”);
负载=假;
}
});
}
}
$(文档)。在(“单击”,“测试”,函数(){
检索数据();
});
});
控制器:
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);
}
公共字符串GenerateHTMLforDropDownList(字典myData)
{
字符串HTMLString=“”;
foreach(myData中的KeyValuePair k)
{
HTMLString+=“”+k.值+“”;
}
返回HTMLString;
}
[HttpPost]
公共JsonResult测试()
{
Dictionary myData=newdictionary();
myData.Add(“0”,“Mike”);
myData.添加(“1”、“标记”);
myData.添加(“2”、“卡尔”);
myData.Add(“3”,“Rhona”);
返回Json(GenerateHTMLforDropDownList(myData),JsonRequestBehavior.AllowGet);
}
关于如何修复此问题的任何帮助,谢谢我在MVC中没有这样做,但我在Web表单中做了无数次,看起来您的URL可能是问题所在 //本地主机:9819/Home/Home/Test 在ajax调用中,您可能应该调整这一行
url: "Home/Test"
让它看起来像
url: <%= Page.ResolveUrl("~/Home/Test.asmx") %>
url:
很抱歉,如果这与MVC的基础相差太远。由于错误状态,资源找不到。查看错误中的URL:
http://localhost:9819/Home/Home/Test
假设您没有做更多的自定义操作,如果您在主控制器上有测试
操作,则URL应为:
还要注意如何在代码中指定URL:
url: "Home/Test"
如果您当前处于http://localhost:9819/Home/Anything
然后该相对URL表示在当前资源的“子目录”(松散地使用单词)中查找名为Test
的资源。这就是你的问题
不要像那样手动指定URL,而是在MVC中使用URL.Action
方法。大概是这样的:
url: '@Url.Action("Test", "Home")'
这将从服务器端代码生成一个完全限定的URL,而不管您当前的上下文在哪里,因此您不必根据当前URL或类似的内容对其进行调整。您需要将按钮类型更改为“button”not submit,因为这是ajax调用
POST-localhost:9819/Home/@Url.Action(%22Test%22,%20%22Home%22)500(内部服务器错误)@BuyMyBet:您使用的是Razor语法(我使用的语法)还是旧语法?这真的是一个在服务器端进行亲处理的MVC视图吗?原理是一样的,您需要将硬编码的相对URL替换为来自服务器的动态URL。Url.Action()
方法用于创建此Url。@BuyMyBet:然后尝试类似的操作:
。不管语法如何,原则都是一样的。Url.Action
方法正是为了这个目的而设计的:或者,你可以手动使用一个更绝对的Url(/Home/Test
),但是只有当站点位于服务器的根目录下时,它才起作用,所以它不是可移植的。我试过了,但是因为逗号(,)我得到了一个语法异常@BuyMyBet:是什么导致语法错误?它是服务器端还是客户端?听起来您的整体设置可能有问题,因为视图未正确预处理。在您看来,您是否使用了其他服务器端代码?未捕获的语法错误:意外的标识耶,这归结为我对MVC缺乏经验。