gpt4 book ai didi

javascript - $.ajax 响应在内容类型 :application/json for xml content in json 中生成错误

转载 作者:行者123 更新时间:2023-11-30 10:25:36 25 4
gpt4 key购买 nike

这很简单。我想我可能遇到了不兼容的响应内容类型的问题

这是我用来发送 jQuery ajax 请求的代码:

 var settings = { dataType: 'json',
url: 'services/loadTemplate.ashx',
data: JSON.stringify({ 'Name': element.name }), // element.name },
processData: false,
//contentType: "application/json; charset=utf-8",
type: 'POST',
success: function (data) {
console.log('successData:'+data);
alert(data);
},
error: function (xhr, status, error) {
var err = eval("(" + xhr.responseText + ")");
alert(err.Message);
}
}
$.ajax(settings);

这是我试图在 success 回调中获取的响应。

{
'name': 'sMan',
'svg1': '<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="513" height="490"><desc>Created with Raphaël</desc><defs></defs><text x="50.5" y="50" text-anchor="middle" font="10px &quot;Arial&quot;" stroke="none" fill="#000000" font-size="0px" style="text-anchor: middle; font-style: normal; font-variant: normal; font-weight: normal; font-size: 0px; line-height: normal; font-family: Arial;"><tspan>Text</tspan></text><image x="173.5" y="79.5" width="176" height="158" preserveAspectRatio="none" xlink:href="uploaded/75884f70-8872-49c1-8337-2cbbca626b2e.png" id="P28m" fill="#ff0000" stroke="#000000" stroke-width="1" fill-opacity="1" stroke-opacity="1" font-family="Calibri" style="stroke-width: 1px; fill-opacity: 1; stroke-opacity: 1; font-family: Calibri;"></image></svg>',
'svg2': ''
}

但成功并没有被触发。我正在设置 context.Response.ContentType = "application/json"; 在服务器端请求处理程序中,我只是将上面的字符串写入响应。什么是正确的如何做到这一点?

编辑:

以这种方式返回:

 return "{'name':'" + name + @"',
'svg1':'" + dt.Rows[0]["svg1"].ToString() + @"',
'svg2':'" + dt.Rows[0]["svg2"].ToString() + "'}";

这有效:

 StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
using (JsonWriter jsonWriter = new JsonTextWriter(sw))
{
jsonWriter.Formatting = Formatting.Indented;
// jsonWriter.WriteStartArray();
jsonWriter.WriteStartObject();
jsonWriter.WritePropertyName("name");
jsonWriter.WriteValue(name);
jsonWriter.WritePropertyName("svg1");
jsonWriter.WriteValue(dt.Rows[0]["svg1"].ToString());
jsonWriter.WritePropertyName("svg2");
jsonWriter.WriteValue(dt.Rows[0]["svg2"].ToString());
jsonWriter.WriteEndObject();

/* return "{'name':'" + name + @"',
'svg1':'" + dt.Rows[0]["svg1"].ToString() + @"',
'svg2':'" + dt.Rows[0]["svg2"].ToString() + "'}";*/
}

return sb.ToString();

最佳答案

您的问题不在于 JavaScript 代码或 jQuery API 的使用。喜欢others已经指出它在服务器端。更具体地说,JSON 对象键 have to be double quotes (更普遍的是,JSON 字符串必须用双引号引起来)。

因为您在发布的代码中使用 C# 和 ASP.NET。根据您使用的框架,您有其他选择。在所有情况下,我建议您使用对象而不是自己构建 JSON。

var yourObj = new {name=name,svg1=dt.Rows[0]["svg1"].ToString(),svg2=dt.Rows[0]["svg2"].ToString()}

现在您有一个代表数据的 C# 对象。

如果您使用的是 ASP.NET MVC 之类的东西:

return Json(yourObj,JsonBehavior.AllowGet);

如果您正在使用 WebAPI,您可以这样做

return yourObj; // will figure out JSON conversion itself

如果您正在使用其他任何东西,或者您正在使用的任何东西本身都不支持 JSON 响应。你需要得到 Newtonsoft.JSON从 NuGet 打包并返回:

return JsonConvert.SerializeObject(yourObj);

这会将您的对象有效地转换为字符串。

关于javascript - $.ajax 响应在内容类型 :application/json for xml content in json 中生成错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19703774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com