如何在JSONP响应中管理?
我需要管理像'
在我的JSONP请求中的char,通过jquery进行Ajax。 所以(来自C#)这就是我所做的:
myText = "Hello I'm a string"; myText.Replace("'", "\'"); Response.Write(Request["callback"] + "({ htmlModulo: '" + myText + "'});");
但在客户端,它破了:
parsererror - SyntaxError: missing } after property list
所以,我如何管理'
如果替换不起作用?
.NET已经为您解决了序列化JSON问题。 使用System.Web.Script.Serialization.JavaScriptSerializer
:
var serializer = new JavaScriptSerializer();
要构造JSONP,您只需要连接前缀(硬编码或传入“回调”查询参数)和后缀(通常只是)
,但有时您可能需要传递额外的参数,具体取决于调用者的期望,42, null)
) JSON文本。
下面的示例显示了基于“callback”参数构造JSONP,根据您的需要替换jsonpPrefix
的值。
var myText = "Hello I'm a string"; var jsonpPrefix = Request["callback"] + "("; var jsonpSuffix = ")"; var jsonp = jsonpPrefix + serializer.Serialize(new {htmlModulo = myText}) + jsonpSuffix); Response.Write(jsonp);
您应该始终使用序列化程序,因为自己动手意味着您更有可能陷入困境并违反JSON规范。 例如,您没有引用JSON所需的密钥,因此jQuery和其他JSON解析器将非常混淆。 它还将处理所有需要转义的字符。
有关构造JSON的更多信息,请参阅如何在C#中创建JSON字符串 。
保留原文,但在json中使用双引号将其转义:
Response.Write(Request["callback"] + "({ htmlModulo: \"" + myText + "\"});");
你也可以尝试这个:
var jsonSerializer = new System.Web.Script.Serialization.JavaScriptSerializer(); string json = jsonSerializer.Serialize(yourCustomObject);
然后我也离开了
你需要这样做:
myText.Replace("'", "\\'");
如果您想要htmlModulo
属性值的转义单引号。 但是,您的实际JSON仍然无效。 根据规范 ,您应该使用双引号来包围键名和值。 因此,为了使您的回复有效,您需要发送:
{"htmlModulo": "myText value"}
它实际上与JSONP无关,因为它依赖于在DOM中插入新的脚本元素。 因此,即使是不正确的JSON也会被JavaScript解释器正确解释。 问题是,如果您要求数据为普通JSON。 如果你这样做,那么你现在发送它的方式将失败,有各种各样的库。 特别是,jQuery将使用不正确的JSON静默失败。