如何避免将VB转义字符(“转义字符”)随意转换为Javascript(“转义字符”)

如何避免将VB转义字符(“转义字符”)随意转换为Javascript(“转义字符”),javascript,asp.net,json,ajax,vb.net,Javascript,Asp.net,Json,Ajax,Vb.net,在我正在创建的网站中,根据网站客户端上用户指定的过滤器,从asp文件发出查询。查询将始终包含一些转义双引号(对于SQL规则),因为VB样式的转义为“”。但是,当我将此查询传递到javascript文件以通过映射Web服务运行时,转义双引号将替换为javascript样式的转义引号,即\“ 当通过ajax函数查询oracle DB并在google map上绘制点时,它会出错,因为javascript样式的转义字符(\“”)最终会以某种方式变成(\ \“”),这显然不会被SQL接受。下面是一个示例测

在我正在创建的网站中,根据网站客户端上用户指定的过滤器,从asp文件发出查询。查询将始终包含一些转义双引号(对于SQL规则),因为VB样式的转义为“”。但是,当我将此查询传递到javascript文件以通过映射Web服务运行时,转义双引号将替换为javascript样式的转义引号,即\“

当通过ajax函数查询oracle DB并在google map上绘制点时,它会出错,因为javascript样式的转义字符(\“”)最终会以某种方式变成(\ \“”),这显然不会被SQL接受。下面是一个示例测试,以及我在调试时看到的内容

html隐藏输入分配:

queryStringInput.Value = commandstr + wherestr
从aspx.vb页面进行正确的查询(我知道这种语法很好,所以这是我想在js文件中显示的文字):

从html隐藏输入变量获取上述查询的js命令(通过测试,我发现需要使用双引号):

js文件中实际显示的内容代替了查询:

\"SELECT cf.METERID as \"Meter ID\", REPID as \"Rep ID\", DIVISION as \"Division\", OPCTR as \"Op Center\",  CITY as \"City\", ADDRESS as \"Address\", cf.PREMISEID as \"PremiseID\",  daysOnPrem.premCount as \"Days Bad On Premise\",  premRecurr.premCount as \"Premise Recurrences\",  RATECODE as \"Ratecode\", METERFORM as \"Meter Form\", METERSTATUS as \"Meter Status\", METERPOINTSTATUS as \"Meter Point Status\",  BILLINGCYCLE As \"Billing Cycle\", FILENAME As \"Filename\", FILEDATETIME As \"File Date/Time\", LATITUDE As \"Latitude\", LONGITUDE As \"Longitude\", FAILURETYPE As \"Fail Type\", CURRENTSTATUS As \"Current Status\" from COMMUNICATION_FAILURES cf  join (Select meterid, PREMISEID, count(PREMISEID) As premCount from COMMUNICATION_FAILURES group by meterid, PREMISEID) daysOnPrem On daysOnPrem.meterid = cf.meterid  join (Select premiseid, count(premiseID) As premCount from (Select meterid,PREMISEID, count(PREMISEID) As premCount from COMMUNICATION_FAILURES group by meterid, PREMISEID) group by PREMISEID) premRecurr On premRecurr.premiseID = cf.premiseid  WHERE DIVISION = 'Western' AND FILEDATETIME >= to_date('06012016', 'mmddyyyy')\"
随后的错误消息(您可以在其中看到三个反斜杠):


那么,这里有什么解决办法来保留VB文件的格式,而不是让javascript文件重新格式化转义字符呢?

结果证明Json.stringify确实有效。它似乎重新转义转义短语中使用的字符,这使得添加的字符太多,但返回的字符是正确的事实证明Json.stringify确实有效。它似乎重新转义了转义短语中使用的字符,这使得添加的字符似乎太多了,但它返回时是正确的。
var queryStringValue = "\"" + document.getElementById('queryStringInput').value + "\"";
\"SELECT cf.METERID as \"Meter ID\", REPID as \"Rep ID\", DIVISION as \"Division\", OPCTR as \"Op Center\",  CITY as \"City\", ADDRESS as \"Address\", cf.PREMISEID as \"PremiseID\",  daysOnPrem.premCount as \"Days Bad On Premise\",  premRecurr.premCount as \"Premise Recurrences\",  RATECODE as \"Ratecode\", METERFORM as \"Meter Form\", METERSTATUS as \"Meter Status\", METERPOINTSTATUS as \"Meter Point Status\",  BILLINGCYCLE As \"Billing Cycle\", FILENAME As \"Filename\", FILEDATETIME As \"File Date/Time\", LATITUDE As \"Latitude\", LONGITUDE As \"Longitude\", FAILURETYPE As \"Fail Type\", CURRENTSTATUS As \"Current Status\" from COMMUNICATION_FAILURES cf  join (Select meterid, PREMISEID, count(PREMISEID) As premCount from COMMUNICATION_FAILURES group by meterid, PREMISEID) daysOnPrem On daysOnPrem.meterid = cf.meterid  join (Select premiseid, count(premiseID) As premCount from (Select meterid,PREMISEID, count(PREMISEID) As premCount from COMMUNICATION_FAILURES group by meterid, PREMISEID) group by PREMISEID) premRecurr On premRecurr.premiseID = cf.premiseid  WHERE DIVISION = 'Western' AND FILEDATETIME >= to_date('06012016', 'mmddyyyy')\"
"{\"Message\":\"Invalid object passed in, \\u0027:\\u0027 or \\u0027}\\u0027 expected. (38): {queryString: \\\"SELECT cf.METERID as \\\"Meter ID\\\", REPID as \\\"Rep ID\\\", DIVISION as \\\"Division\\\", OPCTR as \\\"Op Center\\\",  CITY as \\\"City\\\", ADDRESS as \\\"Address\\\", cf.PREMISEID as \\\"PremiseID\\\",  daysOnPrem.premCount as \\\"Days Bad On Premise\\\",  premRecurr.premCount as \\\"Premise Recurrences\\\",  RATECODE as \\\"Ratecode\\\", METERFORM as \\\"Meter Form\\\", METERSTATUS as \\\"Meter Status\\\", METERPOINTSTATUS as \\\"Meter Point Status\\\",  BILLINGCYCLE As \\\"Billing Cycle\\\", FILENAME As \\\"Filename\\\", FILEDATETIME As \\\"File Date/Time\\\", LATITUDE As \\\"Latitude\\\", LONGITUDE As \\\"Longitude\\\", FAILURETYPE As \\\"Fail Type\\\", CURRENTSTATUS As \\\"Current Status\\\" from COMMUNICATION_FAILURES cf  join (Select meterid, PREMISEID, count(PREMISEID) As premCount from COMMUNICATION_FAILURES group by meterid, PREMISEID) daysOnPrem On daysOnPrem.meterid = cf.meterid  join (Select premiseid, count(premiseID) As premCount from (Select meterid,PREMISEID, count(PREMISEID) As premCount from COMMUNICATION_FAILURES group by meterid, PREMISEID) group by PREMISEID) premRecurr On premRecurr.premiseID = cf.premiseid  WHERE DIVISION = \\u0027Western\\u0027 AND FILEDATETIME \\u003e= to_date(\\u002706012016\\u0027, \\u0027mmddyyyy\\u0027)\\\", connectionString: \\\"Provider=OraOLEDB.Oracle.1;Password=luvP1ck3ym0u#s;Persist Security Info=True;User ID=amiop;Data Source=pnhar200\\\"}\",\"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(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit)\\r\\n   at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input)\\r\\n   at System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context, JavaScriptSerializer serializer)\\r\\n   at System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context)\\r\\n   at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)\",\"ExceptionType\":\"System.ArgumentException\"}"