Это ошибка jQuery, или я что-то упустил? - PullRequest
0 голосов
/ 01 мая 2009

Я использую jquery-1.3.2 в веб-приложении AJAX. Я использую метод jQuery ajax $.post() для отправки запросов на сервер.

На сервере я использую php для построения массива, а затем json_encode ответ. Затем на клиенте я использую функцию обратного вызова метода post AJAX для обработки ответа.

Все работает хорошо, пока я не использую метод $.post() для отправки переменных на сервер. Если я отправляю переменные на сервер, я получаю ответ [Object Object], и поэтому я не могу его проанализировать. В данный момент у меня есть обходной путь, когда при публикации переменных я запрашиваю ответ HTML, а затем анализирую его.

Итак, соответствующий код взят с моего сайта:

Джекс звонит:

$.post("inc/sendfeedback.php", {NAME: name,TYPE: type,EMAIL: email,COMMENT: comment}, function(data) {PostData(data);}, "json");

Итак, код PostData выглядит следующим образом:

function ProcessData(data)
{
    //alert(data);
    var jo = eval("(" + data + ")");
    if(jo.result == "true")
    {
        if(jo.data != "" && jo.element != "")
        {
            $(jo.element).html(jo.data);
        }
    }

    SMessage(jo.error);
}

Если я раскомментирую приведенный выше код, в котором содержится предупреждение [объект объекта].

если я удаляю переменные Post из вызова, он работает нормально.

Код сервера выглядит следующим образом:

$arr = array ("result" => $result,"data" => $data,"error" => $error,"element" => $element);
echo(json_encode($arr)); 

Это ошибка с библиотекой jQuery, я пробовал ее с версией 1.2, но она все еще присутствовала там? Я также ищу на сайте jQuery и не могу найти никого, имеющего эту проблему.

Так что я предполагаю, что что-то упустил. Но что?

Ответы [ 3 ]

5 голосов
/ 01 мая 2009
$.ajax({
      url: "script.php",
      global: false,
      type: "POST",
      data: {NAME: name,TYPE: type,EMAIL: email,COMMENT: comment},
      dataType: "json",
      contentType: "application/json",
      success: function(data){
         alert(data.result);
      }
   }

Нет необходимости оценивать, jQuery проверяет / анализирует его перед вызовом обратного вызова.

eval = чистое зло

http://docs.jquery.com/Ajax/jQuery.ajax#options

1 голос
/ 01 мая 2009

Поскольку вы используете ассоциативный массив PHP, json_encode будет возвращать строковое представление объекта Javascript, а не массива Javascript. Однако вы все равно должны иметь возможность обрабатывать его аналогично массиву:

for (var key in data)
{
    var item = data[key];
}

Я бы настоятельно рекомендовал вам скачать дополнение Firefox + Firebug и использовать консольный API для отладки / выгрузки того, что возвращается сервером.

0 голосов
/ 03 мая 2009

С тех пор я зарегистрировался и теперь не могу публиковать комментарии в этой теме без репутации и не вижу простого способа заявить этот вопрос как мой.

Deviant, ваше предложение использовать метод $ .ajax () сработало. Причина, по которой это не сработало для меня в первый раз, была в том, что я отправил данные поста в виде объекта JSON, когда код сервера ожидал данные POST.

Итак, я исправил свой javascript, чтобы правильно вызывать серверный скрипт, и все работает точно так, как должно.

Итак, вывод заключается в том, что метод $ .post () содержит ошибку. Я не отслеживал это, но строка 3633 - это, где метод post выполняет вызов. Я начал копать, но еще не нашел проблему.

Я квалифицирую это тем, что $ .ajax () для того же серверного скрипта и того же javascript обрабатывает ответ, и все это работает, использую метод $ .post, и мой скрипт завершается ошибкой с возвратом даже через возвращаемый объект представляется допустимым объектом JSON.

Спасибо за помощь, ребята. Теперь нужно удалить все мои вызовы $ .post для вызовов $ .ajax.

Результат всего этого можно увидеть на www.pygames.net

Приветствие Шейн a.k.a FrogSkin

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...