2016-01-08 3 views
0

У меня проблема:Лучший способ отображения сообщений об ошибках вызова ajax?

У меня есть текстовое поле, в котором я принимаю значение текстового поля при нажатии кнопки ввода, и я хочу поймать ошибку, что имя отсутствует. поэтому я добавил это в моей модели:

validates :name, presence: true 

В мой контроллер я только изменил то, что должно произойти, если сохранить его удастся:

def create 
    @role = Role.new(role_params) 

    respond_to do |format| 
    if @role.save 
     format.js { render :created } 
    else 
     format.json { render json: @role.errors, status: :unprocessable_entity } 
    end 
    end 
end 

и мой файл JavaScript имеет эту функцию:

$(function(){ 
    $("body").on("keyup", "#role_name", function(e){ 
    if (e.which == 13) { 
     role_name = $("#role_name").val(); 
     $.ajax({ 
     type: "POST", 
     dataType: "script", 
     url: '/roles', 
     data: {role: {name: role_name} }, 
     success: function(){ 
     $("#role_name").val(""); 
     $("#alert-new-role").replaceWith("<div id='alert-new-role' class='alert alert-success col-xs-10 col-xs-offset-1'><strong>role created!</strong></div>"); 
     } 
     }).fail(function(){ 
     $("#alert-new-role").replaceWith("<div id='alert-new-role' class='alert alert-danger col-xs-10 col-xs-offset-1'><strong>name can't be empty!</strong></div>"); 

     }); 
    } 
    }); 
}) 

Это действительно работает, но мои сообщения об ошибках жестко запрограммированы. Должен ли я когда-либо добавить второе правило проверки, я не могу сказать, что именно вызвало ошибку.

Firebug показывает мне JSON, который был создан контроллером, но каким-то образом я не могу получить к нему доступ в функции .fail из jQuery.

Я проверил все 4 параметра, но ни одно из них не содержит мое сообщение об ошибке.

Я нашел несколько примеров, как это должно быть сделано, но каким-то образом я не могу воспроизвести его.

Если я могу получить доступ к JSON, это также будет идея сделать частичное в рельсах и передать его обратно в функцию .fail.

+0

The * лучший способ * может зависеть о том, как вы были tau ght, это может быть классифицировано как самоуверенное. – Script47

+0

Вы правы, я буду иметь это в виду в следующий раз. Спасибо. Надеюсь, теперь я буду писать правильно. – Elux91

ответ

1

Это то, что я использую и должен быть достаточно легко расширить с массивом HTML предупреждения и распределительное заявлением на error или только один HTML строки с вставленными значениями от ошибки:

$.ajax({ 
    type: "POST", 
    url: "page.php", 
    data: dataString, 
    success: function() {}, 
    error: function(xhr, status, error) { 
     var err = eval("(" + xhr.responseText + ")"); 
     console.log(err.Message); 
     console.log('xhr: '); 
     console.log(xhr); 
     console.log('status: ' + status); 
     console.log('error: ' + error); 
    } 
    }); 

Вы можете доступ к данным, вы хотите с помощью объекта XHR в функции ошибки, которая будет что-то вроде ниже (щелкните правой кнопкой мыши и открыть изображение в новой вкладке для лучшего взгляда):

enter image description here

+0

похоже, что сообщение об ошибке находится внутри поля responseText. Я просто был поражен количеством объектов внутри xhr и не проверял всех из них. теперь это только вопрос, как я получаю доступ к JSON, но я это выясню. большое спасибо. – Elux91

+0

Вы можете получить к нему доступ через объект 'xhr' в функции ошибки – DelightedD0D

+0

Да, я знаю, я имел в виду, как я обрабатываю JSON в jquery, до сих пор не имел дело с ними. – Elux91

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