如何在JSONP响应中管理?

mar*_*zzz 3 c# ajax jquery json jsonp

我需要管理像'我的JSONP请求中的char ,通过jquery进行Ajax.所以(来自C#)这就是我所做的:

myText = "Hello I'm a string";
myText.Replace("'", "\'");
Response.Write(Request["callback"] + "({ htmlModulo: '" + myText + "'});");
Run Code Online (Sandbox Code Playgroud)

但在客户端,它破了:

parsererror - SyntaxError: missing } after property list
Run Code Online (Sandbox Code Playgroud)

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

Jac*_*all 6

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

var serializer = new JavaScriptSerializer();
Run Code Online (Sandbox Code Playgroud)

要构造JSONP,您只需要使用JSON文本连接前缀(硬编码或传入"回调"查询参数)和后缀(通常只是),但有时您可能需要根据调用者的期望传递额外的参数,42, null)).

下面的示例显示了基于"回调"参数构建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);
Run Code Online (Sandbox Code Playgroud)

您应该始终使用序列化程序,因为自己动手意味着您更有可能陷入困境并违反JSON规范.例如,您没有引用JSON所需的密钥,因此jQuery和其他JSON解析器将非常混淆.它还将处理所有需要转义的字符.

有关构造JSON的更多信息,请参阅如何在C#中创建JSON字符串.

  • @markzzz JSON对允许的内容非常严格.JSON的部分原因在于它是一种数据格式,因此您不应该在其中放置任意代码.一旦将JSON加载到JS中,"\ u003cdiv"与"<div"完全相同,因此您实际上最好使用序列化程序输出的内容. (2认同)