如何在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静默失败。