Подтвердить что ты не робот

Rails: "head: ok" интерпретируется как "ajax: error"

Возможный дубликат:
jquery не вызывает метод успеха на $.ajax for rails standard REST DELETE answer

Я отвечаю на удаленную ссылку (data-remote = "true" data-type = "json" ) и выводит

format.json { head :ok }

в моем контроллере Rails (3.2.6), который создает этот заголовок:

Status Code:200 OK

...
Connection:keep-alive
Content-Length:1
Content-Type:application/json; charset=utf-8
Server:thin 1.4.1 codename Chromeo
Set-Cookie: ... path=/; HttpOnly
X-UA-Compatible:IE=Edge
...

В моем файле JavaScript запускается ajax: complete и выводится 200 (data.status).

  $( '#myElement' ).on( 'ajax:complete', function( e, data ) {
    console.log( data.status );
  });

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

 ...
 readyState: 4
 responseText: " "
 setRequestHeader: function ( name, value ) {...
 state: function () {...
 status: 200
 statusCode: function ( map ) {...
 statusText: "OK"
 ...

Выглядит неплохо для меня...

Проблема

Вместо ajax: success jQuery (jquery-ujs) выполняет ajax: ошибка, и я понятия не имею, почему, поскольку ошибка не указана.

Я много размышлял о дискуссиях, но таким образом всегда казалось, что это решение, а не проблема. Спасибо за любую помощь!

4b9b3361

Ответ 1

Отвечено здесь.

jQuery ожидает ответ JSON. "head: ok" имеет одно пространство для тела ответа, поэтому jQuery не может проанализировать ответ JSON, поэтому он по-прежнему считает код состояния 200 ошибкой.

Вы можете настроить Rails на head :no_content, у которого есть пустое тело или render :json=>true

Это обсуждалось в Rails здесь.

Причиной для единственного пробела в head :ok в Rails является обходной путь в старой ошибке Safari.