2016-07-12 2 views
0

Я новичок в AJAX, так что несите меня. Я пытаюсь отправить данные из окна чата-сообщения в два места - фактическое окно чата и метод рельсов. Таким образом, я могу отображать meesage, а также сохранять сообщение в моей БД.Rails проблема отправки данных AJAX контроллеру

У меня есть следующий JS/HTML код

<button onclick="myFunction()" name="submitmsg" type="submit" id="submitmsg" value="Send">Try it</button> 

<script> 
    function myFunction() { 
     var x = document.getElementById("frm1"); 
     console.log(x); 
     var text = ""; 
     var i; 
     for (i = 0; i < x.length ;i++) { 
      text += x.elements[i].value + "<br>"; 
     } 
     document.getElementById("chatbox").innerHTML += text; 

     $.ajax({ 
      url : "/messages/create", 
      type : "post", 
      data : { data_value: x } 
      dataType : "text" //this might be wrong? 
     }); 

    } 
</script> 

Я могу успешно вставить в HTML DOM, но не передает данные в контроллер сообщений create действия. Мои контроллеры сообщений называются messsages_controller.rb, а действие - create.

Я добавил debugger в свое действие create, чтобы затем просмотреть, что такое params, но он даже не выполняет код.

Некоторые маршруты:

messages GET /messages(.:format)   messages#index 
      POST /messages(.:format)   messages#create 
    new_message GET /messages/new(.:format)  messages#new 
    edit_message GET /messages/:id/edit(.:format) messages#edit 
     message GET /messages/:id(.:format)  messages#show 
       PATCH /messages/:id(.:format)  messages#update 
       PUT /messages/:id(.:format)  messages#update 
       DELETE /messages/:id(.:format)  messages#destroy 

UPDATE

ждать, что-то не так с моей JS кода. Ранее он вставлял HTML в DOM, но где-то по его настройкам он останавливался. Теперь консоль бросает ошибку new:110 Uncaught SyntaxError: Unexpected identifier строка 110 закомментирована.

Когда я вызываю функцию, тогда она работает нормально. У меня есть что-то синтаксически неправильно, когда я называю .ajax функции внутри myFunction()

+0

Какие маршруты вы выбрали? Можете ли вы добавить коды для метода 'create' в вашем контроллере? – Kumar

+0

Вы правы в своей догадке, 'dataType' должен быть' json'. –

+0

@NicNilov, который не разрешил проблему. Правильно ли, если я помещу 'debugger' в действие' create', то он должен открыть отладчик в консоли? Я добавил маршруты –

ответ

1
$.ajax({ 
    url : "/messages", //by rails convention doing a post simply to '/messages' should be handled by create action 
    method : "post", 
    data : { data_value: x }, 
    dataType : "json", //this might be wrong? 
    success: function(response){ 
    //do something,maybe notify user successfully posted their message 
    }, 
    error: function(error){ 
    console.log(error); 
    } 
}); 

И в методе create вы должны обрабатывать запросы json

def create 
    //save message 
    @message.save! 
    respond_to do |format| 
    format.json { json: @message.as_json } 
    end 
end 

Это как ваш код должен выглядеть следующим образом. Вы всегда можете сделать больше творчески.

Оформить заявку на это gist

+0

'create' по-прежнему не выполняется - проверено путем размещения' debugger' в качестве первой строки в действии 'create' –

+0

Вы выбрали« url: »/ messages« change »? –

+0

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