Браузер иногда отображает текст JSON вместо желаемой страницы - PullRequest
5 голосов
/ 13 апреля 2011

В моем приложении Rails периодически возникала проблема, и я не мог понять, что происходит.Когда пользователь входит в систему, он видит панель управления, содержащую некоторый код JavaScript, который выполняет AJAX-вызов действия.Иногда, вместо того, чтобы видеть панель мониторинга, когда пользователь входит в систему, он видит текст ответа JSON из действия вместо панели мониторинга (в Chrome) или загружает файл .json (Firefox).Это прерывисто и обычно не происходит, но это действительно раздражает, когда это происходит.

Вот тупая версия некоторого кода:

JS, работающий в заголовке шаблона:

$(function () {
    var remoteLink = $('#remoteLink');
    remoteLink.live("ajax:complete", function () {
        setTimeout(function () {
           loadCount();
        }, 30000);
    });    

    loadCount();

    function loadCount() {
      remoteLink.click();
    }
});

И ссылка в шаблоне:

<%= link_to 'get count (hidden)', {:controller => 'something', :action => 'count'}, 
            :id => 'remoteLink', :class => 'hidden', :remote => true, 'data-type' => 'json' %>

И действие контроллера:

def count
    render :json => get_counts_function_returning_a_hash
end

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

Ответы [ 2 ]

4 голосов
/ 16 апреля 2011

Есть ли у вас какой-либо код аутентификации, который использует store_location или аналогичные функции для перенаправления пользователя на определенную страницу после того, как он вошел в систему?

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

В любом случае, я подозреваю, что это нечто подобное, а не проблема с Rails.

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

Я бы заподозрил Content-Type HTTP-ответа и проверил все места, где вы его устанавливаете, на возможные ошибки.Запустите ваш браузер с расширением для отслеживания заголовков HTTP, чтобы получить значения, когда оно происходит.

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