How do I PUT data to Rails using JQuery

前端 未结 6 847
半阙折子戏
半阙折子戏 2020-11-30 00:32

I am trying to send a jquery ajax PUT request that looks like this:

$.ajax({
          type: \"PUT\",
          url: \'/admin/pages/1.json\',
          data:         


        
相关标签:
6条回答
  • 2020-11-30 00:48

    PUT and DELETE are not supported by all browsers, RubyOnRails supports passing an extra parameter with your data called _method which will indicate how RoR will treat the request.

    $.ajax({
              type: "POST",
              url: '/admin/pages/1.json',
              data: { _method:'PUT', page : {...} },
              dataType: 'json',
              success: function(msg) {
                alert( "Data Saved: " + msg );
              }
    });
    
    0 讨论(0)
  • 2020-11-30 00:48

    The dataType param in jQuery isn't what you send, but rather specifies the format you expect the answer to be (yes, that's a very poor name). If you want to send your data to the server in a format other then application/x-www-form-urlencoded you should use contentType param. You also need to serialize your data:

    $.ajax({
          type: "PUT",
          url: '/admin/pages/1.json',
          data: JSON.stringify({...}),
          contentType: 'application/json', // format of request payload
          dataType: 'json', // format of the response
          success: function(msg) {
            alert( "Data Saved: " + msg );
          }
    });
    
    0 讨论(0)
  • 2020-11-30 00:49

    You probably just need to set the Request Headers on jQuery.

    jQuery.ajaxSetup({ 
      'beforeSend': function(xhr) {
        xhr.setRequestHeader("Accept", "text/javascript");
      }
    })
    
    0 讨论(0)
  • 2020-11-30 00:55
    var id = $('#route_id').val()
    $.ajax({
        type: 'PUT',
        url:  '/routes/'+ id,
        data: $('#markerform').serializeArray(),
        dataType: "JSON",
        success: function(data) {
            console.log(data);
        }
    });
    
    0 讨论(0)
  • 2020-11-30 00:56

    I had a similar problem [object Object] with jQuery/rails, but with HTML, rather than JSON. Perhaps this will help -

    param of [object Object]

    data: { lesson: { date: drop_date } }
    

    param of lesson[date]

    data: { "lesson[date]": drop_date }
    

    hope this helps -

    0 讨论(0)
  • 2020-11-30 01:06

    Ok, actually my JSON data didn't have the page key, my mistake. So thats why it was not correctly parsing. But now I get "[object Object]" string as the value for page key instead of a nicely parsed json object.

    Where should I look: JQuery or Rails?

    EDIT:

    I've solved my issue stringifying the json object with a script found here: www.json.org/js.html:

    $.ajax({
          type: "PUT",
          url: '/admin/pages/1.json',
          data: { page : JSON.stringify( {...} ) },
          dataType: 'json',
          success: function(msg) {
            alert( "Data Saved: " + msg );
          }
    });
    

    On the rails side json gem must be required. In the controller:

     params[:page] = JSON.parse params[:page] if params[:page].is_a? String
    
    0 讨论(0)
提交回复
热议问题