В AJAX-запросе от jQuery отсутствуют параметры в Rails-обработке - PullRequest
1 голос
/ 02 апреля 2012

Я работаю над AJAX-запросами между jQuery и Rails 3.1 (прямо сейчас, работаю на localhost, тестирую в Chrome и Firefox, если это поможет).Когда пользователь нажимает на ссылку, я передаю значения двух текстовых полей на сервер.В частности, у меня есть контроллер с именем AnswerersController, который будет хранить эти два значения в таблице базы данных «answers».

Ниже приведен мой код переднего плана для выполнения запроса.Запрос успешно получен Rails, так как функция ответа в этом запросе происходит, и мой абзац под названием «last_chance» заполняется тем, что сервер отвечает.

$('.other_question a').click(function(e) {          
        var this_profile_id = window.location.pathname.substring(1).split('/')[1];
        var this_question_id = window.location.pathname.substring(1).split('/')[3]; // there is a hidden space when splitting

        var ajax_data = {
            type : "PUT", /* should this be POST for older browsers? */
            url : '/profiles/' + this_profile_id + '/answers/' + this_question_id + '.json',
            contentType : 'json',
            dataType : 'json',
            success : function(msg) {
                alert("Data Saved: " + msg );
                $('#last_chance').text(msg['saved']);
            },
            data : {
                _method : 'PUT',
                page : {
                    authenticity_token : $('input[name=authenticity_token]').attr('value'),
                    answer : {
                        response : 'hi there',
                        comments : 'word'
                    },

                    action : 'update',
                    controller : 'answers',
                    profile_id : this_profile_id,
                    id : this_question_id
                }                   
            }               
        };
        $.ajax(ajax_data);
        return false;

    });

Вот мой внутренний код для обработки этого:метод обновляется в AnswerSontroller:

def update
    respond_to do |format|
       format.html { redirect_to 'http://google.com'}
       format.json { render :json => {:saved => 'ok: ' + params.to_s }.to_json }
     end

    return
end

Теперь, когда я заполняю элемент абзаца «last_chance» параметрами, полученными Rails, он показывает следующее:

ok: {"action"=>"update", "controller"=>"answers", "profile_id"=>"11", "id"=>"42", "format"=>"json"}

ItКажется, если что-то не произошло, о чем я не знаю, что Rails не принимает и не принимает эти другие параметры, которые я включил в вызов AJAX.Может ли кто-нибудь объяснить мне, почему это так?И как я могу убедиться, что он получает все включенные параметры?

Большое спасибо заранее за любую помощь!

О, также: я удалил все параметры данных, итот же результат был возвращен (я думаю, что Rails обрабатывает возвращенные параметры).Но как я могу передать данные тогда?Куда делись эти пользовательские параметры?

РЕДАКТИРОВАТЬ: по предложению ответа я изменил его на следующее:

    params[:saved] = 'OK'
    respond_to do |format|
        format.html { redirect_to 'http://google.com'}
        format.json { render :json => params.to_json }
    end

Из этого единственный вывод, который я получил в части "last_chance", был"ХОРОШО".Куда я могу пойти отсюда?

Ответы [ 2 ]

1 голос
/ 02 апреля 2012

Параметр типа для запроса ajax должен быть 'POST', вы устанавливаете его специально для бэкэндов рельсов с параметром данных _method.Если это не решит проблему, можете ли вы опубликовать соответствующие маршруты?Ах, и не устанавливайте contentType, потому что по умолчанию подходит для вашего случая использования.

1 голос
/ 02 апреля 2012

Попробуйте добавить дополнительные параметры перед рендерингом, например:

params[:saved] = 'ok: '
format.json { render :json => params.to_json }
...