Во-первых, JavaScript не имеет встроенной функции json_parse()
. Если вы сами это не определили, возможно, выдает ошибку JavaScript. Стандартная клиентская утилита, доступная в новых браузерах: JSON.parse()
Что еще более важно, у вас есть некоторая избыточная сериализация. Когда вы работаете с ASP.NET ScriptServices и PageMethods, важно позволить встроенному сериализатору ASP.NET выполнить преобразование вашего ответа в JSON .
Прямо сейчас ваш WebMethod возвращает беспорядок дважды сериализованного JSON, который выглядит примерно так:
{d:{\"{\"error\": \"No IDs\"}\"}
Поскольку вы установили для dataType
значение json
, jQuery уже выполняет операцию синтаксического анализа JSON до запуска ваших обработчиков успеха или ошибок, но он только конвертирует первый уровень JSON в объект JavaScript. К сожалению, это приводит только к тому, что .d
содержит еще одну строку JSON.
Если вы позволите ASP.NET сделать всю работу за вас, вы можете использовать что-то подобное в WebMethod:
[WebMethod]
public static string Login(string username, string password)
{
return "No IDs";
}
И тогда все будет более гладко на стороне клиента:
success: function(msg) {
if (!msg.d) {
alert("No Error);
} else {
alert(msg.d);
}
},
Если вы действительно хотите сохранить error
в качестве ключа для сообщения об ошибке, вы можете сделать что-то вроде этого:
[WebMethod]
public static object Login(string username, string password)
{
return new { error = "No IDs" };
}
Или даже использовать определенный класс:
public class ErrorResponse
{
public string error { get; set; }
}
[WebMethod]
public static ErrorResposne Login(string username, string password)
{
var response = new ErrorResponse();
response.error = "No IDs";
return response;
}
В любом из этих последних случаев вы можете получить доступ к тексту ошибки через msg.d.error
, как только он попадет на сторону клиента.