MVC 4 ajax 查询不接受来自控制器的 json 对象
MVC 4 ajax query not accepting json object from controller
.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;
}
我更改了代码中的名称,但无论如何,当我运行该网站并单击 div 它会联系控制器并且 return 是正确的 json 对象(在 return 行中放置断点以验证填充了哪些测试)。不过,网页上没有任何内容 return。在 Web 浏览器调试器中,我在 ajax 函数中放置了一个断点并且命中,但是当我点击继续时它永远不会命中我在 show 函数中放置的断点。此外,它也不显示警报("error"),当我取出数据或更改 url 时,它会显示错误警报。
我尝试过的东西...
将控制器类型更改为 JsonResult - 控制器 return 相同,但永远不会返回页面。
尝试将 contentType 添加到 ajax 函数 - 导致控制器永远不会被调用。无论我输入什么值。"application/json; charset=utf-8" <- 这个不起作用。
尝试了 shorthand 版本的 ajax ,你刚刚把 success: show.
从您的 AJAX 请求中删除此行:
dataType: "string",
您的控制器 returns JSON,因此请确保您指定了正确的类型:
dataType: "json",
但由于 jQuery 足够智能,可以使用 Content-Type
响应 header 来猜测正确的内容类型,您可以简单地将其删除。
还有IIRC,错误函数被称为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');
}
})
试试这个。 "dataType" 是您发送的内容,"accepts" 是您的查询接受的内容。
$.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');
}
});
我想通了...我将控制器函数的 return 类型更改为 String,然后使用 JavaScript 序列化程序将我创建的模型列表转换为 JSON 可以传递回视图上的 ajax 函数的字符串。我还删除了 ajax 函数中的数据类型,因为 ajax 能够自动找出 return 类型主要是什么。
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>
控制器:
[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;
}
这段代码 return 将一个 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." 以外的名称显然我的对象上有一个类别 属性 并且该参数也称为类别正在炸毁它。一旦我将其更改为例如:
[HttpPost]
public ActionResult SaveCategory(CategoryLookupUIObject categoryLookup)
它开始传递视图模型对象而不是 null。任何参数名称都有效,但 "category".
除外
我注意到 OP 有一个 属性 叫做 Type 并且他在控制器上的参数名称是 "type",所以我不得不指出这就是问题的根源就我而言;也许也适用于 OP?
祝你好运!
.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;
}
我更改了代码中的名称,但无论如何,当我运行该网站并单击 div 它会联系控制器并且 return 是正确的 json 对象(在 return 行中放置断点以验证填充了哪些测试)。不过,网页上没有任何内容 return。在 Web 浏览器调试器中,我在 ajax 函数中放置了一个断点并且命中,但是当我点击继续时它永远不会命中我在 show 函数中放置的断点。此外,它也不显示警报("error"),当我取出数据或更改 url 时,它会显示错误警报。
我尝试过的东西...
将控制器类型更改为 JsonResult - 控制器 return 相同,但永远不会返回页面。
尝试将 contentType 添加到 ajax 函数 - 导致控制器永远不会被调用。无论我输入什么值。"application/json; charset=utf-8" <- 这个不起作用。
尝试了 shorthand 版本的 ajax ,你刚刚把 success: show.
从您的 AJAX 请求中删除此行:
dataType: "string",
您的控制器 returns JSON,因此请确保您指定了正确的类型:
dataType: "json",
但由于 jQuery 足够智能,可以使用 Content-Type
响应 header 来猜测正确的内容类型,您可以简单地将其删除。
还有IIRC,错误函数被称为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');
}
})
试试这个。 "dataType" 是您发送的内容,"accepts" 是您的查询接受的内容。
$.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');
}
});
我想通了...我将控制器函数的 return 类型更改为 String,然后使用 JavaScript 序列化程序将我创建的模型列表转换为 JSON 可以传递回视图上的 ajax 函数的字符串。我还删除了 ajax 函数中的数据类型,因为 ajax 能够自动找出 return 类型主要是什么。
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>
控制器:
[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;
}
这段代码 return 将一个 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." 以外的名称显然我的对象上有一个类别 属性 并且该参数也称为类别正在炸毁它。一旦我将其更改为例如:
[HttpPost]
public ActionResult SaveCategory(CategoryLookupUIObject categoryLookup)
它开始传递视图模型对象而不是 null。任何参数名称都有效,但 "category".
除外我注意到 OP 有一个 属性 叫做 Type 并且他在控制器上的参数名称是 "type",所以我不得不指出这就是问题的根源就我而言;也许也适用于 OP?
祝你好运!