Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用json填充下拉列表_Javascript_Ajax_Asp.net Mvc_Json - Fatal编程技术网

Javascript 用json填充下拉列表

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.

我正在尝试一些东西,并用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.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缺乏经验。