ajax не работает после var data = json_parse (msg.d); - PullRequest
0 голосов
/ 06 июня 2011

Я впервые играю с Ajax. Я пытаюсь просто создать базовый логин в данный момент. В любом случае у меня есть следующий скрипт ..

     <script language = "javascript">
            function Login() {  

                       $.ajax({
                        type: "POST",
                        url: "ajax.aspx/Login",
                        data: '{' +
                                'username:"' + $('#username').val() + '",' +
                                'password:"' + $('#password').val() + '"' +
                               '}',
                        contentType: "application/json; charset=utf-8",
                        dataType: "json",
                        success: function(msg) {
                            alert("alert1");
                            var data = json_parse(msg.d);
                            alert("alert2");
                            if (!data.error) {
                                alert("No Error);
                            }
                            else {
                                alert(data.error);
                            }
                        },
                        error: function(msg) {
                            alert('Failure: ' + msg);
                        }
                    });         

            }
    </script>

По какой-то причине он ничего не запускает после var data = json_parse (msg.d);

Показывает первые два оповещения, но отмечает после.

страница ajax имеет следующее `

[WebMethod]
public static string Login(string username, string password)
{
    return "{\"error\": \"No IDs\"}";
}

Ответы [ 2 ]

2 голосов
/ 06 июня 2011

Во-первых, 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, как только он попадет на сторону клиента.

0 голосов
/ 06 июня 2011

Что внутри функции json_parse?Эта функция может быть источником вашей ошибки.Лучший способ разобрать JSON - вот так.

  1. Перейдите к Github Дугласа Крокфорда JSON-js / json2.js и скопируйте его
  2. Сверните его на jscompress.com и скопируйте сжатый код (можете пропустить этот шаг)
  3. Вставьте его в папку приложения как json2.js
  4. Теперь обратитесь к сценарию по адресустраница, с которой вы извлекаете данные
    <script src="path/to/script/json2.js" type="text/javascript"></script>

  5. Теперь внутри функции выполните синтаксический анализ JSON следующим образом.
    var data = JSON.parse(msg.d);

На сторонней ноте лучше, если вы измените свой error таким образом, чтобы эффективно отлавливать ошибки.

error: function (xhr, status, error) {
    alert(xhr.statusText);
}

Кроме того, позвоните WebMethod следующим образом.

[WebMethod]
public static string Login(string username, string password)
{
    JavaScriptSerializer js = new JavaScriptSerializer();
    dynamic obj = new ExpandoObject();
    obj.error = "No IDs";
    string str = js.Serialize(obj);
    return str;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...