Javascript MVC 4 ajax查询不接受来自控制器的json对象

Javascript MVC 4 ajax查询不接受来自控制器的json对象,javascript,ajax,asp.net-mvc,json,Javascript,Ajax,Asp.net Mvc,Json,.aspx页面: <script type="text/javascript"> $(document).ready(function () { $('********').click(function (id) { var test = "test"; $.ajax( {

.aspx页面:

<script type="text/javascript">
        $(document).ready(function () 
        {
            $('********').click(function (id) 
            {
                var test = "test";
                $.ajax(
                {
                    type: "POST",
                    url: "*************",
                    data: { type: test },
                    dataType: "string",               
                    success: function (data) { show(data); },
                    failure: function () { alert("Failed"); }
                });
            });
        });

        function show(data)
        {
            alert("Worked");
        }
</script>
[HttpPost]
public ActionResult getTest(String type)
{
     List<Test> test = new List<Test>();
     SqlConnection con = new SqlConnection("*****************");
     SqlCommand cmd = new SqlCommand("****************");
     cmd.Connection = con;
     cmd.Connection.Open();
     SqlDataReader reader = cmd.ExecuteReader();

     int i = 0;
     while (reader.Read())
     {
          test.Add(new Test{ itemName = reader.GetString(0),
                             itemType = reader.GetString(1),
                             itemClass = reader.GetString(2),
                             imageURL = reader.GetString(3)});
     }
     var test = Json(test, JsonRequestBehavior.AllowGet);
     return test;
}

$(文档).ready(函数()
{
$('********')。单击(函数(id)
{
var test=“test”;
$.ajax(
{
类型:“POST”,
url:“*************”,
数据:{type:test},
数据类型:“字符串”,
成功:函数(数据){show(数据);},
失败:函数(){alert(“Failed”);}
});
});
});
功能显示(数据)
{
警惕(“已工作”);
}
控制器功能:

<script type="text/javascript">
        $(document).ready(function () 
        {
            $('********').click(function (id) 
            {
                var test = "test";
                $.ajax(
                {
                    type: "POST",
                    url: "*************",
                    data: { type: test },
                    dataType: "string",               
                    success: function (data) { show(data); },
                    failure: function () { alert("Failed"); }
                });
            });
        });

        function show(data)
        {
            alert("Worked");
        }
</script>
[HttpPost]
public ActionResult getTest(String type)
{
     List<Test> test = new List<Test>();
     SqlConnection con = new SqlConnection("*****************");
     SqlCommand cmd = new SqlCommand("****************");
     cmd.Connection = con;
     cmd.Connection.Open();
     SqlDataReader reader = cmd.ExecuteReader();

     int i = 0;
     while (reader.Read())
     {
          test.Add(new Test{ itemName = reader.GetString(0),
                             itemType = reader.GetString(1),
                             itemClass = reader.GetString(2),
                             imageURL = reader.GetString(3)});
     }
     var test = Json(test, JsonRequestBehavior.AllowGet);
     return test;
}
[HttpPost]
公共ActionResult getTest(字符串类型)
{
列表测试=新列表();
SqlConnection con=新的SqlConnection(“*******************”);
SqlCommand cmd=新的SqlCommand(“****************”);
cmd.Connection=con;
cmd.Connection.Open();
SqlDataReader=cmd.ExecuteReader();
int i=0;
while(reader.Read())
{
Add(新测试{itemName=reader.GetString(0),
itemType=reader.GetString(1),
itemClass=reader.GetString(2),
imageURL=reader.GetString(3)});
}
var test=Json(test,JsonRequestBehavior.AllowGet);
回归试验;
}
我在代码中更改了一些东西的名称,但无论如何,当我运行网站并单击div时,它会联系控制器并返回正确的json对象(在返回行中插入断点以验证测试填充了什么内容)。但是,网页上永远不会返回任何内容。在web浏览器调试器中,我在ajax函数中放置了一个断点,该断点会命中,但当我单击continue时,它不会命中我在show函数中放置的断点。此外,它也不会显示警报(“错误”),当我取出数据或更改url时,它会显示错误警报

我尝试过的事情…

将控制器类型更改为JsonResult-controller将返回相同的结果,但永远不会返回页面


尝试将contentType添加到ajax函数中-导致控制器从未被调用。无论我投入多少价值。“application/json;charset=utf-8”从AJAX请求中去掉这一行:

dataType: "string", 
控制器返回JSON,因此请确保指定正确的类型:

dataType: "json", 
但是,由于jQuery足够智能,可以使用
内容类型
响应头猜测正确的内容类型,因此您可以简单地删除它

同样,错误函数被称为
error
,而不是
failure

,您需要添加:

 contentType: 'application/json; charset=utf-8',
例如:

  $.ajax({
        url: 'PUT_YOUR_URL_HERE',
        dataType: "json",
        type: "POST",
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify({ Make: maka.value }),
        async: true, // Or false           
        cache: false,
        success: function (data) {
           //do something
            }

        },
        error: function (xhr) {
            alert('error');
        }
    })
试试这个。“数据类型”是您发送的内容,“接受”是您的查询接受的内容

$.ajax({
    url: 'PUT_YOUR_URL_HERE',
    dataType: "json",
    accepts:"application/json",
    type: "POST",
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify({ Make: maka.value }),
    async: true, // Or false           
    cache: false,
    success: function (data) {
       //do something
        }

    },
    error: function (xhr) {
        alert('error');
    }
});

我想出来了。。。我将控制器函数的返回类型更改为String,然后使用JavaScript序列化程序将我创建的模型列表转换为JSON字符串,该字符串可以传递回视图上的ajax函数。我还删除了ajax函数中的数据类型,因为ajax能够自动确定返回类型

JavaScript:

<script type="text/javascript">
        $(document).ready(function () 
        {
            $('********').click(function (id) 
            {
                var test = "test";
                $.ajax(
                {
                    type: "POST",
                    url: "*************",
                    data: { type: test },               
                    success: function (data) { show(data); },
                    failure: function () { alert("Failed"); }
                });
            });
        });

        function show(data)
        {
            alert("Worked");
        }
</script>

$(文档).ready(函数()
{
$('********')。单击(函数(id)
{
var test=“test”;
$.ajax(
{
类型:“POST”,
url:“*************”,
数据:{type:test},
成功:函数(数据){show(数据);},
失败:函数(){alert(“Failed”);}
});
});
});
功能显示(数据)
{
警惕(“已工作”);
}
控制器:

[HttpPost]
public String getTest(String type)
{
     List<Test> test = new List<Test>();
     SqlConnection con = new SqlConnection("*****************");
     SqlCommand cmd = new SqlCommand("****************");
     cmd.Connection = con;
     cmd.Connection.Open();
     SqlDataReader reader = cmd.ExecuteReader();

     int i = 0;
     while (reader.Read())
     {
          test.Add(new Test{ itemName = reader.GetString(0),
                             itemType = reader.GetString(1),
                             itemClass = reader.GetString(2),
                             imageURL = reader.GetString(3)});
     }
     System.Web.Script.Serialization.JavaScriptSerializer jSearializer = new     System.Web.Script.Serialization.JavaScriptSerializer();
     var temp = jSearializer.Serialize(test);
     return temp;
}
[HttpPost]
公共字符串getTest(字符串类型)
{
列表测试=新列表();
SqlConnection con=新的SqlConnection(“*******************”);
SqlCommand cmd=新的SqlCommand(“****************”);
cmd.Connection=con;
cmd.Connection.Open();
SqlDataReader=cmd.ExecuteReader();
int i=0;
while(reader.Read())
{
Add(新测试{itemName=reader.GetString(0),
itemType=reader.GetString(1),
itemClass=reader.GetString(2),
imageURL=reader.GetString(3)});
}
System.Web.Script.Serialization.JavaScriptSerializer jSearializer=新的System.Web.Script.Serialization.JavaScriptSerializer();
var temp=jSearializer.Serialize(测试);
返回温度;
}

这段代码向视图返回了一个JSON对象,我可以像使用对象数组一样使用它,因此我可以为每个对象向视图中添加多个div,然后将对象值写入div。

我今天遇到了一个类似的问题:JSON对象始终为null

    var id = $('#ModalCategoryId').val();
    var category = $.trim($('#ModalCategory').val());

    var categoryJson = new Object();
    categoryJson.CategoryId = id;
    categoryJson.Category = category;
    var data = JSON.stringify(categoryJson);

    $.ajax({
        "url": SAVE_CATEGORY_URL,
        data: data,
        type: "POST",
        dataType: 'json',
        traditional: true,
        contentType: 'application/json; charset=utf-8',
以及控制器操作方法声明:

    [HttpPost]
    public ActionResult SaveCategory(CategoryLookupUIObject category)
json总是显示为null,直到我将参数名更改为除“category”之外的其他名称。显然,在我的对象上有一个category属性,并且有一个也称为category的参数,这会使它崩溃。一旦我将其更改为,例如:

    [HttpPost]
    public ActionResult SaveCategory(CategoryLookupUIObject categoryLookup)
它开始传递视图模型对象,而不是null。除“类别”外,任何参数名称都有效

我注意到OP有一个名为Type的属性,并且他在控制器上的参数名为“Type”,因此我不得不指出这是我的问题的根源;也许是为了这次行动


祝你好运

我试过。。。还尝试将其更改为数据类型:“json”仍会命中控制器,但返回值不会传递回ajax函数OK,现在查看web浏览器的控制台。您看到任何错误了吗?如果没有错误,并且您可以看到来自服务器的JSON响应,那么就没有错误了