Ajax-запрос попадает на сервер, но страница не обновляется - Rails, jQuery - PullRequest
0 голосов
/ 18 марта 2010

Итак, у меня есть сценарий, когда мой jjuery-запрос ajax попадает на сервер, но страница не обновляется. Я в тупике ...

Вот запрос ajax:

$.ajax({
    type: 'GET',
    url: '/jsrender',
    data: "id=" + $.fragment().nav.replace("_link", "")
});

Смотря логи рельсов, я получаю следующее:

Processing ProductsController#jsrender (for 127.0.0.1 at 2010-03-17 23:07:35) [GET]
Parameters: {"action"=>"jsrender", "id"=>"products", "controller"=>"products"}
  ...
Rendering products/jsrender.rjs
Completed in 651ms (View: 608, DB: 17) | 200 OK [http://localhost/jsrender?id=products]

Итак, мне кажется очевидным, что запрос ajax поступает на сервер. Код в методе jsrender выполняется, но код в jsrender.rjs не запускается. Вот метод, jsrender:

def jsrender
    @currentview = "shared/#{params[:id]}"   
    respond_to do |format|
        format.js {render :template => 'products/jsrender.rjs'}
    end
end

Ради аргумента, код в jsrender.rjs:

page<<"alert('this works!');"

Почему это? Я вижу в параметрах, что нет authenticity_token, но я также попытался передать authenticity_token с тем же результатом.

Заранее спасибо.

1 Ответ

2 голосов
/ 19 марта 2010

Из того, что я вижу здесь, ваш запрос обрабатывается на сервере, а ответ возвращается, но если вы хотите, чтобы он был обработан / оценен, вы должны добавить функцию обратного вызова к вызову $ .ajax, в что вы говорите, что делать с ответом.

$.ajax({
  type: 'GET',
  url: '/jsrender',
  data: "id=" + $.fragment().nav.replace("_link", ""),
  success: function(response) {
    eval(response);
  }
});

Вы можете найти все доступные параметры для вызова $ .ajax в jQuery здесь .

Я также рекомендую использовать Firebug (или эквивалентный, если вы не используете Firefox) для отладки ваших ajax-запросов.
Он имеет вкладку консоли, в которой можно просмотреть каждый сделанный XHR-запрос, заголовки запроса / ответа, опубликованные данные и код состояния ответа.

Кроме того, нет необходимости отправлять authenticity_token, потому что вы делаете GET, а токен требуется только для не-GET запросов.

...