2014-10-25 3 views
1

У меня был рабочий код, в котором был вызван вызов AJAX, который не требует возвращаемого значения.rails/jquery/ajax: done callback не исполняется

Javascript (на самом деле CoffeeScript):

$.ajax({ 
     url: "/images/" + image_id + "/" + action, 
     type: "GET", 
     dataType: 'json' 
    }).done((response) -> 
     alert("hello") 
    ) 

На стороне сервера у меня было так:

respond_to do |format| 
    format.js {render nothing: true} 
end 

Это работает нормально

Но теперь мне нужно возвращать значение, поэтому я изменилась сторона сервера на это:

respond_to do |format| 
     format.json {render :json => @image.quality} 
end 

Это также отлично, без ошибок на стороне сервера или на стороне клиента, но «завершенный» обратный вызов никогда не выполняется.

Что мне не хватает? Я искал много документов, и я смущен тем, что нашел. Официальные документы http://www.railscook.com/recipes/rails-view-controller-ajax-response-example/ говорят, что для рендеринга js с шаблоном, но мне не нужно отображать javascript напрямую, мне просто нужно значение на стороне клиента.

+0

Если вы проверяете ответ с помощью инструментов разработчика браузера, вы видите какой-либо ответ с ожидаемым json? Как насчет каких-либо ошибок JavaScript в окне консоли? – Alireza

+0

На самом деле я вижу ответ json, когда смотрю на firebug в разделе консоли и на вкладке ответа! Таким образом, кажется, что ответ приходит - но тогда почему не «сделал» огонь? Должен ли я использовать другой обратный вызов? – faboolous

+0

Мне нравится функция '$ .get', она короткая и всегда работает для меня, попробуйте:' $ .get (url, function (response) {alert ("got it!");}); '- вы просто необходимо установить переменную 'url', прежде чем вызывать ее – Alireza

ответ

0

Плотина.

Проблема заключалась в том, что JSON был искажен.

По какой-то причине

format.json {render :json => @image.quality} 

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

Так что, если я изменить это

format.json {render json: @image} 

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

+1

Я должен был попросить вас включить обратный вызов ошибки, я предполагаю ваш ответ был в порядке, так как вы могли проверить его с помощью Firebug. В любом случае хорошая учебная сессия :) – Alireza

+0

Спасибо за вашу поддержку и помощь! – faboolous

Смежные вопросы