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 ?
        }
    });

我的问题:

  1. 为什么我在成功函数中没有得到响应
  2. 这是正确的做法吗?或者我应该将HTML表转换为json对象,然后返回它。然后再次以表格格式显示?

jQuery:在jQuery ajax 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结构。