.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时,它会联系控制器并返回正确的json对象(在断言处放置断点以验证测试填充的内容) )。但是,没有任何东西返回到网页。在Web浏览器调试器中,我在ajax函数中放置了一个断点,然后点击,但是当我点击继续它时,它永远不会到达我放在show函数中的断点。此外,它也不会显示警报(&#34;错误&#34;),当我取出数据或更改网址时,它会显示错误提示。
我尝试过的事情......
将控制器类型更改为JsonResult - 控制器返回相同的内容,但永远不会返回页面。
尝试将一个contentType添加到ajax函数 - 导致控制器永远不会被调用。无论我投入什么价值。&#34; application / json;字符集= UTF-8&#34; &lt; - 这个不起作用。
尝试了ajax的速记版本,你只需要成功:show。
答案 0 :(得分:0)
从您的AJAX请求中删除此行:
dataType: "string",
您的控制器返回JSON,因此请确保指定正确的类型:
dataType: "json",
但是,由于jQuery足够聪明,可以使用Content-Type
响应标头来猜测正确的内容类型,因此您只需将其删除即可。
同样是IIRC,错误功能称为error
,而不是failure
。
答案 1 :(得分:0)
您需要添加:
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');
}
})
答案 2 :(得分:0)
试试这个。 “dataType”是您发送的内容,“接受”是您的查询所接受的内容。
$.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');
}
});
答案 3 :(得分:0)
我想通了......我将控制器函数的返回类型更改为String,然后使用JavaScript序列化器将我创建的模型列表转换为可以传递回ajax函数的JSON字符串风景。我还删除了ajax函数中的dataType,因为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>
控制器:
[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;
}
此代码将JSON对象返回给视图,然后我可以像对象数组一样使用它,因此我可以为每个对象的视图添加多个div,然后将对象值写入div。
答案 4 :(得分:0)
我今天遇到类似的问题:JSON对象总是为空。
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 UNTIL我将参数名称更改为“category”之外的内容。显然在我的对象上有一个Category属性,并且该参数也被称为类别,这样就搞砸了。一旦我改为例如:
[HttpPost]
public ActionResult SaveCategory(CategoryLookupUIObject categoryLookup)
它开始传递视图模型对象而不是null。除“类别”外,任何参数名称都有效。
我注意到OP有一个名为Type的属性,并且控制器上的参数名称也是“类型”,所以我觉得有必要指出这是我案例中问题的根源;或许对于OP也是如此?
祝你好运!