jQuery + Rails + ajaxForm + js.erb проблема - PullRequest
2 голосов
/ 01 октября 2009

У меня проблема, которая сводит меня с ума, и, судя по всему, что я видел и читал в Интернете, она должна работать нормально.

Я использую jQuery с моим Rails-приложением вместо прототипа и использую плагин ajaxForm для отправки некоторых данных формы через ajax. Данные формы отправляются в порядке, соответствующее действие контроллера вызывается в порядке, правильный блок response_to для типа js вызывается в порядке.

Проблема заключается в том, что содержимое файла * .js.erb возвращается клиентскому браузеру и не интерпретируется как javascript. На самом деле ничего не происходит с этим. Да, я установил dataType: 'script', но он все еще не работает. Я также пытался не использовать плагин ajaxForm и вручную использовать функцию $ .post при отправке формы, но результат все тот же.

для некоторых примеров кода, вот мой вызов ajaxForm:

$("#purchase-item-form").ajaxForm({ 
  dataType: 'script'
});

Я также правильно устанавливаю заголовок accept, это работает нормально, потому что выполняется мой блок format.js

jQuery.ajaxSetup({
  'beforeSend': function(xhr) { xhr.setRequestHeader("Accept", "text/javascript") }
});

в моем файле действия * .js.erb все, что у меня есть, - это предупреждение на данный момент, чтобы помочь отладить проблему, пока я не смогу ее выяснить:

alert("action processed successfully");

Это просто не работает в Firefox или Safari. Если я загляну в консоль firebug, то увижу, что оператор alert возвращается как ответ на вызов ajax, а клиент просто не оценивает его как javascript.

К вашему сведению, я работаю на Rails 2.3.4 и jQuery 1.3.2, если это имеет значение

1 Ответ

2 голосов
/ 01 октября 2009

Я столкнулся с EXACT той же проблемой. Вы должны вручную eval код, который возвращается. Я не могу точно вспомнить, почему его не уволили, но я использовал те же плагины, что и вы, и это исправило это.

Редактировать 1: Чтение Статья , поскольку это помогло решить проблему. Редактировать 2: Попробуйте следующее:

$("#purchase-item-form").ajaxForm({ 
  dataType: 'script',
  success: evalResponse
});

function evalResponse(responseText, statusText) {
  eval(responseText);
}

Смотрите здесь для получения дополнительной информации.

...