使用 jQuery、Ajax 和 JSON 提交单引号

Posted

技术标签:

【中文标题】使用 jQuery、Ajax 和 JSON 提交单引号【英文标题】:Submission with single quotes using jQuery, Ajax and JSON 【发布时间】:2010-11-21 03:47:03 【问题描述】:

我环顾四周,试图找到一个优雅的解决方案,但我还没有找到。我在 .NET 中有一个 ASMX Web 服务,我试图调用它需要参数。

我在客户端使用 jQuery 来调用服务,我的 jQuery 代码如下所示:

$.ajax(
    type: "POST",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    url: "/Reviews/HotelReview.asmx/SubmitReview",
    data: "'name': '" + name + "', " +
        "'info': '" info + "'",
    processData: true,
    beforeSend: function()  startSubmit(); ,
    complete: function()  submitComplete(); ,
    error: function(xhr)  submitError(xhr); ,
    success: function(msg)  submitSuccess(msg.d); 
);

效果很好,除非 nameinfo 包含 ' 字符,即单引号。很简单,因为我的 JSON 定义了字段值的结尾并且是单引号。当这些字段中的任何一个包含单引号时,我得到的只是“内部服务器错误”,但使用Fiddler 进行的进一步检查显示结果(我不会费心发布它们)表明单引号问题。

我已经临时放置了一些东西来删除客户端的单引号并将它们放回服务器端,但这远非优雅。有没有更优雅的方式来转义这些单引号,以便我的代码可以工作?

【问题讨论】:

【参考方案1】:

规范说,在 JSON 中,您只能在键和值周围使用双引号,因此请尝试使用双引号。我很确定你的错误会得到解决。

您可能希望使用json.js 对实际值中的特殊字符进行编码/转义,这样您就不会遇到包含“例如”的值或http://www.json.org/js.html 中的stringify 方法的问题。

【讨论】:

很好的回应,谢谢。我使用 json.js 和 JSON.encode(myobject) 而不是构建字符串。 在支持它的浏览器(所有当前版本的浏览器)上,如果 json.js 不会自动为您执行此操作,您可能应该更喜欢本机 JSON 对象 (blogs.msdn.com/ie/archive/2008/09/10/native-json-in-ie8.aspx)。

以上是关于使用 jQuery、Ajax 和 JSON 提交单引号的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jQuery AJAX 和 JSON 通过 Bootbox 确认表单提交

使用原生的ajax如何去提交json格式的数据

如何使用ajax将json传入后台数据

ajax前台提交数据,Json数据在java后台怎么取出来

AJAX请求提交数据

ajax 上传文件,post上传文件,ajax 提交 JSON 格式的数据