2011-10-24 1 views
3

안녕하세요 jQuery UJS를 사용하여 원격으로 제출하는 양식이 있습니다. beforeSend 이벤트에 바인딩하여 서브에 제출하는 데이터를 수정할 수있게했습니다. 작동하지 않습니다. 여기는 내가 전에 가지고있는 것입니다.ajax를 수정하는 방법 beforeSend 이벤트에서 데이터를 게시 하시겠습니까?

settings.data = JSON.stringify({ 
     'list_item[title]' : 'hi?? there' 
}) 

이것은 작동하지 않습니다. 서버 로그에 다음과 같이 표시됩니다.

Started POST "/lists/9/list_items" for 127.0.0.1 at 2011-10-24 14:04:36 -0700 
    Processing by ListItemsController#create as JSON 
    Parameters: {"{\"list_item"=>{"title"=>{"\":\"hi?? there\"}"=>nil}}, "list_id"=>"9"} 

내가 뭘 잘못하고 있는지 알겠습니까? 양식에없는 추가 된 필드로 settings.data를 사용자 정의하고 싶습니다. 감사합니다

답변

2

settings.data에 넣기 위해 무엇이든 문자열을 지정할 필요가 없습니다. The data is :

서버에 보낼 데이터입니다. 아직 문자열이 아니면 쿼리 문자열로 변환됩니다. 그것은 GET 요청에 대한 URL에 추가됩니다. [...] 객체는 키/값 쌍이어야합니다.

"{"list_item[title]":"hi?? there"}" 

data로를하지만 문자열은 상황이 혼란스러워하는거야 그래서 쿼리 문자열되지 않습니다 :

은 당신이하는 일은이 문자열을두고있다.

settings.data = { 'list_item[title]' : 'hi?? there' }; 

및 jQuery를 거기에서 그것을 밖으로 정렬 보자 : 당신은 단순히 settings.data에 자바 스크립트 객체를 할당 할 수 있어야한다. 오히려 문서 이외의 증거를 기반으로


업데이트 :

그러나, 추가 조사는이 작동하지 않는 것을 알 수있다. 내가 GET 요청을 보낼 경우, 내가 settings.data에 대한 변경은 무시됩니다하지만 POST 요청을 보내는 경우, 다음 settings.data 스틱으로 변경하지만 당신은을 통해 합리적인 아무것도 얻을 수있는 쿼리 문자열 형식을 사용해야합니다 :

settings.data = encodeURIComponent('list_item[title]') 
       + '=' 
       + encodeURIComponent('hi?? there'); 

서버

Parameters: {"list_item"=>{"title"=>"hi?? there"}} 

그리고 당신이 계신 것 같습니다 : POST 요청과 함께 settings.data의 버전은 저에게이 가져옵니다. 원래 매개 변수 중 일부를 보존하려면 수동으로 쿼리 문자열의 압축을 풀고 다시 포장해야합니다.

+0

감사합니다. settings.data = { 'list_item [title]': 'hi'로 시도해 보았습니다. 거기에 '}; 그러나 로그에서 이것을 봅니다 : Parameters : { "object object"=> nil, "list_id"=> "9"} I – AnApprentice

+0

@AnApprentice : 조사를 해봤는데, jQuery는'설정 .data' 변경은'beforeSend' 콜백에 관련되어 있습니다. 내 업데이트를보십시오. –