Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.137.187.186] |
|
Сообщ.
#1
,
|
|
|
Всем привет!
На форме есть поле, которое нужно валидировать запросом на сервер. Используем jQuery Validation Engine, прописал класс: "ajaxFieldFree": { "url": "WebService/UserCheck.asmx/IsLoginFree", "method": "post", "data": "json", "extraData": "user_id=test", "alertText": "* Этот логин уже занят", "alertTextOk": "* Этот логин свободен", "alertTextLoad": "* Проверка, подождите..." } Данные летят такие: {fieldId:'user_2687_2',fieldValue:'eu\qqq',extraData:'user_id=test'} Соот-но, ASP.NET падает с ошибкой из-за "\" в строке: "Unrecognized escape sequence. (39): {fieldId:'user_2687_2',fieldValue:'eu\qqq',extraData:'user_id=test'}" StackTrace " at System.Web.Script.Serialization.JavaScriptObjectDeserializer.AppendCharToBuilder(Nullable`1 c, StringBuilder sb) at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeString() at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth) at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeDictionary(Int32 depth) at System.Web.Script.Serialization.JavaScriptObjectDeserializer.DeserializeInternal(Int32 depth) at System.Web.Script.Serialization.JavaScriptObjectDeserializer.BasicDeserialize(String input, Int32 depthLimit, JavaScriptSerializer serializer) at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer serializer, String input, Type type, Int32 depthLimit) at System.Web.Script.Serialization.JavaScriptSerializer.Deserialize[T](String input) at System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest(HttpContext context, JavaScriptSerializer serializer) at System.Web.Script.Services.RestHandler.GetRawParams(WebServiceMethodData methodData, HttpContext context) at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)" Что ему, блин, надо? Добавлено Метод на сервере оформлен так: [WebMethod(true)] [ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Json)] public object[] IsCompanyFieldAllowed(string fieldId, string fieldValue, string extraData) { return new object[] {fieldId, false}; } |
Сообщ.
#2
,
|
|
|
HttpEncode/HttpDecode не спасет?
|
Сообщ.
#3
,
|
|
|
Цитата deil @ Соот-но, ASP.NET падает с ошибкой из-за "\" в строке: А удвоить пробовал? fieldValue:'eu\\qqq' |
Сообщ.
#4
,
|
|
|
Цитата kosten @ HttpEncode/HttpDecode не спасет? Где? До серверного кода не доходит Добавлено Цитата Vladimir @ Цитата deil @ Соот-но, ASP.NET падает с ошибкой из-за "\" в строке: А удвоить пробовал? fieldValue:'eu\\qqq' Если удвоить - работает. Но этот запрос генерируется автоматически, поэтому удвоить перед отправкой не получится. Добавлено Так. Судя по стандарту, "\" действительно должен быть экранирован. Значит, вопрос не к ASP.NET, а к jQuery! Блин. |
Сообщ.
#5
,
|
|
|
Ошибка была в коде плагина, он генерил JSON без экранирования служебных символов.
|
Сообщ.
#6
,
|
|
|
Цитата deil @ {fieldId:'user_2687_2',fieldValue:'eu\qqq',extraData:'user_id=test'} Дело в том, что это не JSON {'fieldId':'user_2687_2','fieldValue':'eu\qqq','extraData':'user_id=test'} А вот это JSON, в JSON имя параметра так же должно быть в кавычках. Да, в JS работает парсинг, а вот при использовании других инструментов может и не взлететь без имя параметра без кавычек. |
Сообщ.
#7
,
|
|
|
Цитата Axis @ А вот это JSON это тоже не джейсон, на сам деле кавычки должны быть, а не апострофы |