Вызов $ .get () AJAX не может обработать ответ сервера - PullRequest
2 голосов
/ 09 октября 2010

Это может показаться немного смешным, даже не знаю, как поставить название вначале. Это может быть из-за долгих часов работы, или я просто делаю что-то не так.

У меня есть файл, скажем, comment.php, который содержит что-то похожее на:

var params = $('form#myform').serialize();
$.get("/ajax/file.php?"+params, function(data){
    if (data == 'error') {
        $('#message').html('Error');
    } else if (data == 'success') {
        $('#message').html('Success');
    }
});

Я проверил это с помощью firebug, и все в порядке, ошибок JS нет, файл вызывается и возвращает либо «error», либо «success», но все же в теле вызова ajax data не соответствует ответу сервера. Я тогда изменил

if (data == 'error') {
    $('#message').html('Error');
} else if (data == 'success') {
    $('#message').html('Success');
}

с

if (trim(data) == 'error') {
    $('#message').html('Error');
} else if (data == 'success') {
    $('#message').html('Success');
}

где trim () - это написанная мной функция, которая удаляет все пробелы до или после строки. Я также попробовал сделать так, чтобы файл назывался повторяющимися числами и выполнял проверку с помощью jQuery, например:

if (data == 1) {
    $('#message').html('Error');
} else if (data == 'success') {
    $('#message').html('Success');
} 

без результатов. Если я только оповещение (данные) все выглядит жестко. Оба файла находятся в одном домене. Мой код точно такой же, как в примере, только у меня больше условий if / else, и одно из них должно всегда совпадать (это происходит, если я смотрю в firebug). Я также попытался использовать оператор switch безрезультатно.

Я уже давно пользуюсь этим методом, и у меня никогда не было проблем. Идеи?

Ответы [ 2 ]

2 голосов
/ 09 октября 2010

Обратный вызов .get() использует 3 аргумента:

  1. данные
  2. статус
  3. XMLHttpRequest

Итак, ваш метод должен работать.Убедитесь, что вы обращаете внимание на заглавные буквы, знаки пунктуации и пробелы.

Я бы попытался получить дополнительную информацию о data, чтобы точно определить проблему:

var params = $('form#myform').serialize();
$.get("/ajax/file.php?"+params, function(data){    
        alert("Type: " + typeof.data +
              "\nContents: ==>" + data + "<==" +
              "\nTrim: ==>" + $.trim(data) + "<==");  // get more info
});

Обратите внимание, что jQueryимеет $.trim() функцию

0 голосов
/ 09 октября 2010

Вам не нужно добавлять сериализованные данные в строку запроса таким образом. $ .get () будет принимать три аргумента, один из которых является сериализованной (строка запроса) версией данных или хэшем. Однако вы здесь не для этого.

Данные только те, что напечатаны на странице php. Вы печатаете слово «ошибка» или «успех» с этой страницы? Если нет, то то, что вы пытаетесь сделать, не сработает.

Обратный вызов успеха принимает три аргумента: data, textStatus (response) и xhr. Как насчет:

$.get("/ajax/file.php", $("#myform").serialize(), function (data, status) {
   if (status == 'error') {
      $('#message').html('Error');
   }
   else if (status == 'success') {
      $('#message').html('Success');
   }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...