$.ajax 响应在 content-Type:application/json 中为 JSON 中的 xml 内容生成
$.ajax response generates error in content-Type:application/json for xml content in json
这很简单。我想我可能遇到不兼容的响应内容类型的问题
这是我用来发送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 "Arial"" 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使用。正如其他人指出的那样,它在服务器端。更具体地说,JSON 对象键必须是双引号(更常见的是 JSON 字符串必须用双引号引起来)。
当你使用 C# 时,从你发布的代码中 ASP.NET。根据您使用的框架,您有替代方案。在所有情况下,我建议您使用对象而不是自己构建 JSON。
var yourObj = new {name=name,svg1=dt.Rows[0]["svg1"].ToString(),svg2=dt.Rows[0]["svg2"].ToString()}
现在,你有一个表示数据的 C# 对象。
如果您使用的是类似 MVC ASP.NET
:return Json(yourObj,JsonBehavior.AllowGet);
如果你使用的是WebAPI,你可以做
return yourObj; // will figure out JSON conversion itself
如果您正在使用任何其他内容,或者您使用的任何内容都不支持 JSON 响应本身。需要从 NuGet 获取Newtonsoft.JSON
包并返回:
return JsonConvert.SerializeObject(yourObj);
这会有效地将您的对象转换为字符串。
您应该为返回类型创建一个强类型化对象,然后将其转换为 JSON。
public class Template
{
public string Name {get; set;}
public string SvgXml1 {get; set;}
public string SvgXml2 {get; set;}
}
然后在服务器端 .ashx 中:
var template = new Template
{
Name = name,
SvgXml1 = dt.Rows[0]["svg1"].ToString(),
SvgXml2 = dt.Rows[0]["svg2"].ToString()
};
return JsonConvert.SerializeObject(template);
最后在你的成功回调函数中:
var name = data.Name;
var svg1 = data.SvgXml1;
...
相关文章:
- 如何使用XML中的经度和纬度值在地图上显示位置
- 无法获取XML中的节点值,如何获取
- 无法转义XML中的单引号
- 使用 JavaScript 访问 XML 中的 lastNode 值在 Chrome 中不起作用
- 将数组中的值插入到 XML 中的特定节点中
- 需要有关使用 PHP 删除 XML 中的子项的帮助
- 根据项目标记删除 xml 中的行
- 计算 XML 中的 XPath 表达式
- 选择“XML 中的节点”
- 无法将 XML 中的值保存到 MIRTH JavaScript 中的 TMP 对象
- 防止Scala不必要地转义XML中的双引号
- 如何使用Jquery删除xml中的外部元素
- 使用jquery查找xml中的根节点标记
- 无法通过XML中的类属性应用CSS
- 如何使用jquery读取文件行XML中的属性
- 使用Translate函数删除xml中的换行符,但我如何忽略某些标记
- 通过javascript获取xml中的所有数据
- 使用jquery,我如何迭代xml中的每个节点
- 如何在不指定标记名的情况下读取XML中的子节点名称及其值?
- 列出xml中的xml节点和属性名