Проблема с обработкой ответов jQuery.ajax в контроллере - PullRequest
1 голос
/ 10 июня 2011

Я использую Ruby on Rails 3.0.7 и jQuery 1.6.1. Я пытаюсь реализовать запрос AJAX с использованием синтаксиса jQuery $.ajax(), и у меня возникает проблема с ответом, для которого всегда вызывается ошибка обратного вызова *1003*.

N.B. : маршрутизатор успешно установлен.

В контроллере у меня есть:

def test_method
  ...
  respond_to do |format|
    format.js
  end
end

Код JQuery AJAX для запроса:

$('#test_html_css_id').bind('click', function() {
  $.ajax({
    type: "POST",
    url: "<%= user_url(@user)%>/test_method",
    data: "test_data=<%=  @user.test_data.to_s %>",
    dataType: 'js',
    error: function(jqXHR){
      alert( "ERROR " + jqXHR );
    },
    success: function(jqXHR){
      alert( "SUCCESS " + jqXHR );
    }
  });
});

В приведенном выше примере события click всегда возвращается следующее предупреждающее сообщение:

ERROR [object Object]

Как я могу явно вернуть success или error response в моем контроллере?


Кстати: как я могу вернуть некоторые данные из контроллера, а затем обработать их с помощью триггера в коде jQuery?


ОБНОВЛЕНО после @ dgvid комментария

Использование в коде jQuery этого

error: function(xhr, status, ex) {
    var msg = "";
    if (xhr) {
      msg = "readyState is " + xhr.readyState + ". ";
    }
    if (ex) {
      msg += ex.name + ' - ' + ex.message;
    }
    alert("ERROR " + msg); },

Я получаю следующее предупреждение:

ERROR readyState is 4. SyntaxError - invalid label

Что это значит?

Ответы [ 2 ]

1 голос
/ 10 июня 2011

Исключение SyntaxError с сообщением «недопустимая метка», вероятно, указывает на то, что метод $ .ajax пытается проанализировать данные ответа как JavaScript или JSON, но затем обнаруживает в ответе что-то, что не синтаксически допустимо для этого типа. Попробуйте изменить поле dataType в вашем вызове на «текст», только временно. Посмотрите, поможет ли вам преодолеть эту ошибку и увидеть, что вы на самом деле получаете с сервера.

Кстати:

  1. Документы для jQuery.ajax не указывают "js" в качестве допустимого аргумента для dataType. Вы, вероятно, хотите вместо этого использовать «script» или «json» или «jsonp».
  2. Если dataType not не задан, и я подозреваю, что он недействителен, то $ .ajax пытается определить тип из MIME-типа ответа.

Редактировать : Я должен был также упомянуть - если вы работаете с Firebug или чем-то подобным, попробуйте использовать вкладку Net для проверки ответа сервера. Учитывая MIME-тип ответа, является ли он синтаксически допустимым? Если нет, вам необходимо исправить ответ, поступающий с сервера, исправить тип MIME, указанный в ответе, или изменить dataType в вызове $ .ajax.

1 голос
/ 10 июня 2011

Как я могу явно вернуть успех или ошибка в моем контроллере?

Вы можете сделать это, используя коды состояния HTTP, 200 - успех, 500 - ошибка сервера. Поэтому попробуйте использовать такой код, как:

if @object 
  respond_to do |format|
    format.js
  end
else
  render :nothing => true, :status => 500
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...