2009-05-25 3 views
15

다음과 같은 jQuery Ajax PUT 요청을 보내려고합니다.jQuery를 사용하여 JSON 데이터를 Ruby on Rails에 어떻게 퍼팅합니까?

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

컨트롤러가 대략 다음과 같이 보입니다.

  respond_to do |format| 
     if @page.update_attributes params[:page] 
      format.html{ ... } 
      format.json{ render :json => {:saved => 'ok'}.to_json } 
     else 
      format.html{ ... } 
      format.json{ render :json => {:saved => 'fail'}.to_json } 
     end 
     end 

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

nil.name을 평가하는 동안 오류가 발생했습니다. /라이브러리/Ruby/Gems/1/2/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 : __send__' (__DELEGATION__):2:in에서 ' /라이브러리/Ruby/Gems/1/8/gems/activesupport-2.3.2/lib/active_support/core_ext/hash/conversions.rb:154:in'from_xml ' ... ...

Ruby on Rails가 매개 변수를 XML로 구문 분석하려고하지만 JSON을 사용하고 싶습니다!

JSON을 Ruby on Rails에 적용하려면 어떻게해야합니까?

+1

업데이트를 원래의 질문을 편집하는 대신 새 질문을 물어 :

또한, 당신은 JSON.stringify를 사용하여 data 필드를 직렬화 할 필요가 http://stackoverflow.com/questions/907910/how- do-i-put-data-to-rails-using-jquery – tvanfosson

답변

5

옵션에 contentType을 설정해야합니다. contentType은 보내는 내용입니다. dataType은 기대했던 것입니다. documentation on the options argument to ajax을주의 깊게 읽어야합니다.

+0

데이터도 직렬화해야합니다. 내 대답보기 –

7

설정하면 contentType이 작동하지 않습니다. params [: page]의 해시 대신 문자열을 얻었습니다.

자바 스크립트에 JSON에서 발견되는 스크립트로 JSON 객체 Stringifying :

그래서 내가 이런 식으로 해결

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

레일 측면에 루비를하는 JSON의 보석이 필요합니다 . 컨트롤러에서 :

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

꽤 좋지는 않지만 저에게는 효과적입니다. 당신이 스크립트를 추가하지 않으려면

+0

주의 사항 - 모든 브라우저에서 PUT을 지원하지는 않습니다. 일부는 GET 및 POST 만 수행합니다. 어느 것이 확실하지 않습니다. – skaffman

+0

contentType을 설정하면 Rails가 자동으로 구문 분석을 수행합니다. 내 대답보기 –

2

, 당신은 당신은 당신의 선택에 "application/json"contentType을 설정해야

$.parseJSON("some_jsonish_string") 
1

할 수있는; dataType은 예상 한 것입니다.

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