Не удается получить ответ json, используя $ .getJSON - PullRequest
3 голосов
/ 13 февраля 2011

В настоящее время я разрабатываю приложение Ruby on rails 3.

Моя функция контроллера сервера отображает объект json в ответ:

class DaysController < BaseController
   ...
   def the_days
     ...
     render :json => days
   end
end

В моем javascript я использую следующий код для получения ответа json от сервера (это из функции the_day в контроллере)

$.getJSON(  
             url,  
             {emp_id: emp_id},
             function(data) {
                     var result = data.response;
                     alert(result) 
                     alert(data)
                 },
                 "json"
        );

Я использую firefox browswer и проверил с помощью Firebug , в Firebug Net-> XHR я вижу, что запрос Get выполнен успешно, и ответ "days" есть. Это и запрос, и ответ успешны.

Но я не увидел окно с двумя предупреждениями, определенное в функции $.getJSON выше, почему? Почему я не могу получить ответ " days " в функции $.getJSON ??

----------------- Edited ------------------

Я отредактировал свой код для этого:

$.ajax({
            url: myURL,

            type: 'GET',

            data: {
                emp_id: emp_id
            },

            dataType: "json",

            success: function(data) {
                alert("hi");
                alert(data)
            }
        });

Когда я запускаю этот код, браузер зависает на success: function(data)

Ответы [ 5 ]

2 голосов
/ 13 февраля 2011

Если data возвращается null, но в противном случае ответ был успешным, я бы сказал, что вы отправляете запрос способом, который нарушает Политика аналогичного происхождения .

Запрос должен быть отправлен на тот же хост / порт / протокол, который обслуживал исходную страницу.

Если это только проблема в вашей среде разработки, вы можете протестировать в Chrome, запустивэто из приложения терминала с --disable-web-security.


РЕДАКТИРОВАТЬ: Попробуйте изменить имя параметра с data на другое, например dat или что-то еще.

Затем попробуйте предупредить:

alert( dat );

Я слышал, что в некоторых браузерах возникают проблемы с параметром data, когда вы используете свойство data вызова AJAX.

1 голос
/ 13 февраля 2011

Я предполагаю, что проблема в том, что data не имеет свойства ответа. Попробуйте предупредить только переменную data. Это должен быть сам объект days.

0 голосов
/ 14 февраля 2011

ВСЕ, наконец, я выяснил причину.Причина в том, что на сервере возвращено « неверные данные json ».Это функция контроллера рельсов 'def the_days':

render :json => days

следует изменить на

render :json => days.to_json

Тогда все будет работать гладко :) В любом случае, спасибо вам всем!

0 голосов
/ 13 февраля 2011

Похоже, вы не отправляете правильный заголовок в вашем приложении ruby. Firebug должен сообщить об ответе Content Type как application/json, потому что это то, чего ожидает jquery.

Вы можете попробовать изменить datatype в вашем вызове ajax на html, чтобы увидеть, работают ли ваши alert с этим, но это не очень помогает при разборе json.

0 голосов
/ 13 февраля 2011

Хотелось бы просто оставить комментарий, но у меня пока нет доступа к нему.

В любом случае, я бы начал с чего-то еще более простого.Добавьте несколько текстовых предупреждений, чтобы убедиться, что вы действительно делаете это там, где вы думаете.то есть ...

$.getJSON(  
             url,  
             {emp_id: emp_id},
             function(data) {
                     alert('hi')  // add this
                     var result = data.response;
                     alert('bye') // add maybe even this
                     alert(result) 
                     alert(data)
                 },
                 "json"
        );

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

Редактировать: Вот пример кода из работыкод, который я недавно реализовал

$.ajax({
        url: 'users/check_username',
        type: 'GET',
        data: {
          username: username
        },
        dataType: "json",
        success: function(user_exists) {
          alert(user_exists)      // CHANGE THIS PART
        }
      });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...