jQuery:在jQuery ajax json调用中返回字符串响应
本文关键字:jQuery 返回 字符串 响应 json ajax 调用 | 更新日期: 2023-09-27 18:10:07
我正在使用jquery ajax请求和json作为数据类型传递json数据到我的通用处理程序页面GenericHandler.ashx.cs
。
在我的处理程序代码中,我想以字符串格式返回HTML表。这是我的处理程序代码的快照
context.Response.ContentType = "text/plain";
context.Response.Write(sResponse);
其中sResponse包含<table><tr><td>PropertyName</td><td>PropertyID</td></tr><tr><td>abc</td><td>1</td></tr></table>
我的jquery代码(check inline comment in error function):
id = { 'PropertyID': id };
$.ajax("Handlers/GenericHandler.ashx?Type=getProperties",
{
type: 'post',
dataType: 'json',
cache: false,
contentType: "application/json",
data: JSON.stringify(id),
success: function (data) {
console.log(data);
},
error: function (xhr, status) {
console.log(status); // Output as parseError
console.log(xhr.responseText); // My sResponse string ! But Why Here ?
}
});
我的问题:
- 为什么我在成功函数中没有得到响应
- 这是正确的做法吗?或者我应该将HTML表转换为json对象,然后返回它。然后再次以表格格式显示?
从这里的jQuery文档中,您可以看到dataType
参数是AJAX期望从服务器返回的响应。contentType
参数是在您向服务器发出的请求的报头中放置的内容,以便服务器知道如何读取请求。
dataType
更改为"text",如:
$.ajax("Handlers/GenericHandler.ashx?Type=getProperties",
{
type: 'post',
cache: false,
dataType: 'text',
contentType: "application/json",
data: JSON.stringify(id),
success: function (data) {
console.log(data);
},
error: function (xhr, status) {
console.log(status);
console.log(xhr.responseText);
}
});
我发现在对数据库进行成功的INSERT或UPDATE调用时发出警报非常有用。为这样的任务创建和返回JSON对象是多余的。
您的响应不是有效的JSON,因为它返回纯文本。jQuery期望响应是JSON因为你设置了contentType: "application/json"
如果站点的其他部分使用JSON作为传输格式,那么将HTML包装为JSON对象并返回。
在您的后端代码中,返回如下内容{response_html : "<table><tr><td>PropertyName</td><td>PropertyID</td></tr><tr><td>abc</td><td>1</td></tr></table>"}
在你的jQUery代码中,你可以在成功回调中访问它。
success: function (data) {
console.log(data.response_html);
},
注意-你需要从后端代码中删除纯文本内容类型,并使其成为JSON。
如果您告诉$.ajax
您期望一个JSON,那么来自服务器的text/plain
响应不是一个有效的响应。
关于你的第二个问题:好的方法是返回你想要处理的数据,以JSON格式,例如:
[
{ "label" : "PropertyName", "value" : "abc" },
{ "label" : "PropertyId", "value" : "1" }
]
然后在Ajax请求的成功回调中,使用该数据使用jQuery构建HTML结构。