Jquery 通过AJAX向webservice传递引号时出错

Jquery 通过AJAX向webservice传递引号时出错,jquery,asp.net,ajax,vb.net,Jquery,Asp.net,Ajax,Vb.net,我使用.ajax传递数据,以下是我的数据和contentType属性: data: '{ "UserInput" : "' + $('#txtInput').val() + '","Options" : { "Foo1":' + bar1 + ', "Foo2":' + Bar2 + ', "Flags":"' + flags + '", "Immunity":' + immunity + '}}', contentType: 'application/json; charset=utf-8',

我使用.ajax传递数据,以下是我的数据和contentType属性:

data: '{ "UserInput" : "' + $('#txtInput').val() + '","Options" : { "Foo1":' + bar1 + ', "Foo2":' + Bar2 + ', "Flags":"' + flags + '", "Immunity":' + immunity + '}}',
contentType: 'application/json; charset=utf-8',
服务器端我的代码如下所示:

<WebMethod()> _
Public Shared Function ParseData(ByVal UserInput As String, ByVal Options As Options) As String
$('#txtInput')
不包含双引号时,一切正常,但如果存在双引号,我会收到一个错误(对于asd的输入):


你知道如何避免这个错误吗?另外,当我用引号直接传递相同的输入时,效果很好。

你是否尝试过转义文本,或者用单引号替换双引号,或者用转义字符替换双引号:\“

只是为了澄清最后的答案。。。对象将在服务器端进行求值,由于字段值是字符串,因此需要对其中的任何双引号进行转义-因此应为\“。因为这也是js转义,所以需要将两个字符转义为\”


我遇到了同样的问题。这是我的解决方案:

$.RFStringify=函数(obj){
var结果=obj;
试一试{
结果=JSON.stringify(obj);
结果=结果。替换(/([^\\])\\\“/g,$1\\\”)。替换(/([^\])\“/g,$1\\”)。替换(/([^\\])\“/g,$1\\\”)。替换(/(\”)“/g,$1\\\”);
}捕获(ex){
//$.RFAlertEx(ex);
}最后{
返回结果;
}
};
变量a={
a:‘a’,
b:{
b:‘b’,
c:“{”c:“c”,“d:{”d:“d”,“e:“e”}”
}
};
$('#result').html($.RFStringify(a));


错误
jQuery应该已经在通过
$(“#txtInput”).val()时转义了文本。如果输入了一个引号,则可以正常工作,如果手动转义字符,则效果相同。但是,如果查看实际传递的内容,它看起来好像已经转义了:\“asd\”\(用于asd的输入).哦,是的,我现在明白了。很抱歉。您是否尝试过客户端Sys.Serialization.JavaScriptSerializer.serialize方法来进行表单序列化?服务器端JSSerializer似乎不喜欢提供的内容…可能是JQuery正在做一些不同的事情。我没有,而且我很惭愧地说我接受了简单的解决方法:
.replace(/\“/g,”)
。如果我找到了解决方案,我一定会更新。
Public Structure Options
    Dim Foo1 As Boolean
    Dim Foo2 As Boolean
    Dim Flags As String
    Dim Immunity As Integer
End Structure
{"Message":"Invalid object passed in, \u0027:\u0027 or \u0027}\u0027 expected. (22): { \"UserInput\" : \"asd\"\",\"Options\" : { \"Foo1\":false, \"Foo2\":false, \"Flags\":\"\", \"Immunity\":0}}","StackTrace":"   at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth)\r\n   at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth)\r\n   at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer)\r\n   at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)\r\n   at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)","ExceptionType":"System.ArgumentException"}
$("#txtInput").val().replace(/\"\g, "\\\"")