如何在 JSONP 响应中管理 '?

Posted

技术标签:

【中文标题】如何在 JSONP 响应中管理 \'?【英文标题】:How can I manage ' in a JSONP response?如何在 JSONP 响应中管理 '? 【发布时间】:2012-03-14 23:03:56 【问题描述】:

我需要在我的 JSONP 请求中管理像 ' 这样的字符,通过 jquery 处理 Ajax。所以(来自 C#)这就是我所做的:

myText = "Hello I'm a string";
myText.Replace("'", "\'");
Response.Write(Request["callback"] + "( htmlModulo: '" + myText + "');");

但在客户端它坏了:

parsererror - SyntaxError: missing  after property list

那么,如果替换不起作用,我该如何管理 '

【问题讨论】:

只是一个想法,使用 ascii 代码吗? utf8_encode 不,我还需要使用 html/script!示例: 应该保持原样! 【参考方案1】:

保留文本原样,但在 json 中使用双引号将其转义:

Response.Write(Request["callback"] + "( htmlModulo: \"" + myText + "\");");

你也可以试试这个:

var jsonSerializer = new System.Web.Script.Serialization.javascriptSerializer();
            string json = jsonSerializer.Serialize(yourCustomObject);

然后我也离开this

【讨论】:

是的,但现在如果在我的文本中我有",它会再次崩溃:)【参考方案2】:

你需要这样做:

myText.Replace("'", "\\'");

如果您想在 htmlModulo 属性的值中使用转义单引号。但是,您的实际 JSON 仍然无效。根据the specification,您应该使用双引号将键名和值括起来。因此,为了使您的回复有效,您需要发送:

"htmlModulo": "myText value"

这对 JSONP 来说并不重要,因为它依赖于向 DOM 中插入一个新的脚本元素。因此,即使是不正确的 JSON 也会被 JavaScript 解释器正确解释。问题是您是否曾经以纯 JSON 格式请求数据。如果您这样做,那么您现在发送它的方式将因各种库而失败。特别是,jQuery 会因不正确的 JSON 静默失败。

【讨论】:

使用.Replace("'", "\\'"); 它在客户端也失败了:parsererror - SyntaxError: missing after property list 如果您的脚本不发送一些示例文本,这是我能建议的最好方法。 在客户端使用myText = "Hello I'm a string"; myText.Replace("'", "\\'"); 我得到jQuery17109806225378866104_1330091829763( htmlModulo: 'Hello I'm a string'); 这是从网络检查器复制和粘贴的结果吗?还是 Web 服务器提供的原始数据?如果它来自网络检查器,则不会显示控制序列。【参考方案3】:

.NET 已经为您解决了序列化 JSON 的问题。使用System.Web.Script.Serialization.JavaScriptSerializer

var serializer = new JavaScriptSerializer();

要构造 JSONP,您只需连接前缀(硬编码或传入“回调”查询参数)和后缀(通常只是 ),但有时您可能需要传递额外参数,具体取决于调用者的期望,例如 @987654327 @ ) 与 JSON 文本。

下面的示例显示了基于“回调”参数构造 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 规范。例如,您没有引用键,即required by JSON,因此 jQuery 和其他 JSON 解析器会很困惑。它也会处理所有需要转义的字符。

有关构造 JSON 的更多信息,请参阅How to create JSON string in C#。

【讨论】:

@markzzz JSON 对允许的内容非常严格。 JSON 的部分意义在于它是一种数据格式,因此您不应该在其中放入任意代码。此外,一旦将 JSON 加载到 JS 中,“\u003cdiv”就与“

以上是关于如何在 JSONP 响应中管理 '?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 node.js + Express 中同时支持 json 和 jsonp 响应?

如何响应 JSONP 请求

如何发出 jsonp 请求

如何从 angularjs 中的 JSONP 错误回调中获取数据?

如何在 jQuery ajax 调用中将 JSON 响应解析为 JSONP?

如何通过 Retrofit 和 GsonConverter 处理 JSONP 响应?