복붙노트

[RUBY-ON-RAILS] 내가 jQuery를 사용하여 레일에 데이터를 입력하려면 어떻게

RUBY-ON-RAILS

내가 jQuery를 사용하여 레일에 데이터를 입력하려면 어떻게

나는 모습이 좋아하는 JQuery와 아약스 PUT 요청을 보내려고하고있다 :

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

그러나 나는 다음과 같은 오류가 발생합니다 :

The error occurred while evaluating nil.name
    /Library/Ruby/Gems/1.8/gems/activesupport-2.3.2/lib/active_support/xml_mini/rexml.rb:29:in `merge_element!'
    /Library/Ruby/Gems/1.8/gems/activesupport-2.3.2/lib/active_support/xml_mini/rexml.rb:18:in `parse'
    (__DELEGATION__):2:in `__send__'
    (__DELEGATION__):2:in `parse'
    /Library/Ruby/Gems/1.8/gems/activesupport-2.3.2/lib/active_support/core_ext/hash/conversions.rb:154:in `from_xml' ... ...

레일처럼되어 XML로 PARAMS을 구문 분석하려고하지만 내가 JSON을 사용하려면!

나는 레일에 JSON을 넣어 무엇을 할 것인가?

해결법

  1. ==============================

    1.PUT 및 DELETE가 모든 브라우저에서 지원되지 않습니다, RoR에 요청을 처리하는 방법을 나타냅니다 데이터이라고 _method에 추가 매개 변수를 전달 RubyOnRails 지원.

    PUT 및 DELETE가 모든 브라우저에서 지원되지 않습니다, RoR에 요청을 처리하는 방법을 나타냅니다 데이터이라고 _method에 추가 매개 변수를 전달 RubyOnRails 지원.

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

    2.jQuery를에있는 데이터 유형 PARAM을 보내는 것이 아니라, 당신이 답이 될 것으로 기대 형식 (예, 매우 가난한 이름이다)을 지정합니다. 당신은 형식 다른 다음 응용 프로그램 / x-www-form-urlencoded를 사용한다적인 contentType PARAM에서 서버로 데이터를 전송합니다. 당신은 또한 당신의 데이터를 직렬화해야합니다

    jQuery를에있는 데이터 유형 PARAM을 보내는 것이 아니라, 당신이 답이 될 것으로 기대 형식 (예, 매우 가난한 이름이다)을 지정합니다. 당신은 형식 다른 다음 응용 프로그램 / x-www-form-urlencoded를 사용한다적인 contentType PARAM에서 서버로 데이터를 전송합니다. 당신은 또한 당신의 데이터를 직렬화해야합니다

    $.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 );
          }
    });
    
  3. ==============================

    3.좋아, 실제로 내 JSON 데이터는 페이지 키, 내 실수를하지 않았다. 그게 왜 올바르게 구문 분석되지 않았습니다. 하지만 지금은 "[개체 개체]"대신에 잘 구문 분석 JSON 객체의 페이지 키 값으로 문자열을 얻을.

    좋아, 실제로 내 JSON 데이터는 페이지 키, 내 실수를하지 않았다. 그게 왜 올바르게 구문 분석되지 않았습니다. 하지만 지금은 "[개체 개체]"대신에 잘 구문 분석 JSON 객체의 페이지 키 값으로 문자열을 얻을.

    어디에서 찾아야한다 : JQuery와 또는 레일을?

    편집하다:

    나는 스크립트로 JSON 객체를 stringifying 내 문제는 여기에서 찾아 해결했습니다 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 );
          }
    });
    

    레일에 측면 JSON의 보석이 필요해야합니다. 컨트롤러에서 :

     params[:page] = JSON.parse params[:page] if params[:page].is_a? String
    
  4. ==============================

    4.

    var id = $('#route_id').val()
    $.ajax({
        type: 'PUT',
        url:  '/routes/'+ id,
        data: $('#markerform').serializeArray(),
        dataType: "JSON",
        success: function(data) {
            console.log(data);
        }
    });
    
  5. ==============================

    5.내가 jQuery를 / 레일 비슷한 문제 [개체 개체]를했지만, HTML로, 오히려 JSON보다. 아마도 이것은 도움이 될 것입니다 -

    내가 jQuery를 / 레일 비슷한 문제 [개체 개체]를했지만, HTML로, 오히려 JSON보다. 아마도 이것은 도움이 될 것입니다 -

    [개체 개체]의 PARAM

    data: { lesson: { date: drop_date } }
    

    공과 PARAM [일자]

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

    도움이 되었기를 바랍니다 -

  6. ==============================

    6.당신은 아마 jQuery를에 요청 헤더를 설정해야합니다.

    당신은 아마 jQuery를에 요청 헤더를 설정해야합니다.

    jQuery.ajaxSetup({ 
      'beforeSend': function(xhr) {
        xhr.setRequestHeader("Accept", "text/javascript");
      }
    })
    
  7. from https://stackoverflow.com/questions/907910/how-do-i-put-data-to-rails-using-jquery by cc-by-sa and MIT license