Выполнение запроса ajax и возвращение успеха в действии rails - PullRequest
2 голосов
/ 27 февраля 2012

Я пытаюсь получить некоторый JSON из действия, но у меня есть проблема.

Я знаю, что вы можете вернуть "format.js" и вернуть файл ".js.erb", но ..Представьте, что у меня есть действие, которое возвращает некоторые вещи, и я хочу работать с этим двумя различными способами.У меня не может быть двух разных способов на одном и том же .js.erb, потому что когда я его верну, оба пути будут выполнены, верно?Я имею в виду, что когда я верну этот файл, он будет полностью обработан.

Поэтому я попытался использовать способ jQuery.

У меня есть:

# GET /posts/slug/hidden_content.json
def hidden_content
  @post = Post.find(params[:id])
  @post = hidden_post_part(@post.body)

  respond_to do |format|
    format.json { render json: @post, :status => :ok}
  end
end

Ив controller.coffee:

$ ->
  # Render hidden part of post
  $(".showallpost img").click( ->
    post_url = $(this).next().attr("href").split("/").pop();
    $.ajax
      url: Routes.hidden_content_path(post_url),
      type: "GET",
      contentType: "application/json",
      success: (data) ->
        console.log "foo"
  );

GET работает отлично и возвращает то, что мне нужно, но функция успеха никогда не вызывается, я не вижу журнал "foo".

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

Так что я не могу работать с моими данными GET.

Идеи?

Ответы [ 3 ]

1 голос
/ 28 февраля 2012

Похоже, мой контроллер возвращал обычный html вместо json, поэтому, когда я использовал

dataType: 'json'

Мне нужно было использовать:

dataType: 'html'

Какая-то странная вещь, потому что она должна вернуть немного json, но хорошо, это работает.

Все благодарности Майку Джонсону в: jquery не вызывает метод успеха на $ .ajax для рельсов Стандартный ответ REST DELETE

0 голосов
/ 27 февраля 2012

Я попробовал очень похожий кусок кода, и он работает -

$ -> 
  # Render hidden part of post
  $(".showallpost").click ->
    #post_url = $(this).next().attr("href").split("/").pop();
    $.ajax
      url: "/posts/1.json", #Routes.hidden_content_path(post_url),
      type: "GET",
      contentType: "application/json",
      success: (data) ->
        console.log "foo"

Я предлагаю вам проверить, что такое URL перед отправкой запроса.Он может просто попасть в междоменную проверку запросов Jquery и вообще не быть запущенным - это случилось со мной, когда я использовал "localhost: 3000 / posts / 1.json" в качестве URL вместо просто "posts / 1.json"

0 голосов
/ 27 февраля 2012

В вашем js.erb вы можете положить

<% if success %>
  some javascript you want to execute on success
<% else %>
  some stuff you want to do on failure
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...