使用 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提交form表单

Jquery Ajax 复杂json对象提交到WebService

使用Jquery.form.js ajax表单提交插件弹出下载提示框

jQuery实现ajax提交form表单(可以是提交json),用springmvc接收。图文详解

python测试开发django-131.jQuery中$.ajax()方法POST提交contentType:“application/json“类型数据

Jquery AJAX post提交json示例