рельсы 3 JQuery вызов ajax не удается с statusText: "parsererror" - PullRequest
2 голосов
/ 14 июля 2011

Это может быть глупый вопрос. Извините, если это так.

В приложении rails 3 с последней версией jquery-rails gem "1.0.12" Я пытаюсь заменить html из вызова ajax

$.ajax({
    type: "POST",
    cache: false,
    url: url,
    data: data,
    error: function(jqXHR, textStatus, errorThrown){
        console.log(jqXHR);
        console.log(textStatus);
        console.log(errorThrown);
    },
    success: function(msg){
        alert('Load was performed.');
    }
    });

От контроллера я отвечаю на вызов ajax с кодом htm из файла js.erb содержимое файла js.erb

<img src="<%=@test%>" id="<%=@test_id%>">

Ответ получен, но возникла ошибка Parseerror. Тип содержимого в заголовке ответа:

Content-Type:text/javascript; charset=utf-8

ответ jqXHR в обратном вызове ошибки содержит это

Object
abort: function ( statusText ) {
always: function () {
complete: function () {
done: function () {
error: function () {
fail: function () {
getAllResponseHeaders: function () {
getResponseHeader: function ( key ) {
isRejected: function () {
isResolved: function () {
overrideMimeType: function ( type ) {
pipe: function ( fnDone, fnFail ) {
promise: function ( obj ) {
readyState: 4
responseText: "<img src="/images/author_tests/copywriter_photo_2.jpg" id="copywriter-test-4e1c3eb5e09c1657fb000003">"
setRequestHeader: function ( name, value ) {
status: 200
statusCode: function ( map ) {
statusText: "parsererror"
success: function () {
then: function ( doneCallbacks, failCallbacks ) {
__proto__: Object

Я попытался установить для dataType значение text , но при этом сервер выдает ошибку

ActionView::MissingTemplate (Missing template [.....] with {:locale=>[:"en-US", :"en-US"], :handlers=>[:rhtml, :rxml, :builder, :haml, :erb, :rjs], :formats=>[:text, "*/*"]}

Что я делаю не так?

1 Ответ

0 голосов
/ 19 декабря 2011

На самом деле вы возвращаете HTML, а не JS. Содержимое файла js.erb передается в движок javascript для оценки, поэтому он задыхается от вашего HTML (поскольку это недопустимый javascript).

Так как вы просто хотите вернуть HTML и хотите заменить элемент на странице, попробуйте метод jQuery .load () и дайте вашему URL расширение .html. Затем переместите содержимое файла .js.erb во все, что соответствует формату html для вашего контроллера.

...