【发布时间】:2013-11-11 07:07:35
【问题描述】:
这很简单。我想我可能遇到了响应内容类型不兼容的问题
这是我用来发送 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();
【问题讨论】:
-
这不是有效的 JSON,您需要使用双引号而不是单引号来分隔字符串。
-
@AnthonyGrist 你的意思是说
"svg1":"<svg ..."会起作用吗? -
使用适当的 JSON 编码器而不是自己构建字符串,将是最好的方法。我个人也不喜欢在 JSON 中嵌套 XML 的想法,我会考虑使用纯 XML 格式
-
您还需要将
'name': 'sMan',更改为"name": "sMan",等(不要忘记转义svg1值内的双引号)。但是,是的,如果你真的返回一个有效的 JSON 字符串,我希望它可以工作。 -
@DaveRandom XML 是一个 SVG 图形,他正在传递与该信息相关的信息和图形。我不明白为什么 JSON 不适合这里。我同意如果有效负载只有 xml,那么使用 XML 会更有意义。
标签: javascript jquery ajax json httphandler