2011-09-02 3 views
1

나는 우리가 기본적으로 다음과 같습니다 settings_hash 호출하는 자바 스크립트 해시를 가지고 :jQuery ajax 호출 : .serialize() 또는.param()없이 객체를 전달하는 방법? (? 객체)

{ setting_1=90, setting_2=30, setting_3=19 } 

을 그리고는 다음과 같습니다 포스트있어 :

jQuery.getJSON("model/queries.cfc", { 
    method: 'methodName', 
    data: jQuery.param(settings_hash), 
    }, function(data){ 
     // callback stuff goes here 
    } 
); 

정말 돈을 내 쿼리 페이지에서 데이터 문자열을 디코딩해야하는 것을 좋아하지 않습니다 (coldfusion-bleah입니다). 클라이언트 측에서 디코드를 좀 더 쉽게 처리 할 수있는 쉬운 방법이 있습니까? 우리 기능적으로 GET 것은이되도록 : .serialize() 또는 .PARAM()가 갈 수있는 방법입니다

jQuery.getJSON("model/queries.cfc", { 
    method: 'methodName', 
    setting1: 90, 
    setting2: 30, 
    setting2: 19, 
    }, function(data){ 
     // callback stuff goes here 
    } 
); 

분명히 경우, 그 괜찮아요. 내가 피하고자하는 것은 data=setting_1%3D90%26setting2%3D30%26setting3%3D19과 같이 디코딩해야하는 긴 긴 문자열입니다. 모든 솔루션/의견에 개방적입니다. 긴 긴 문자열이 실제로 어떤 이유로 든 갈 길이라면 설득 해 주시면 답변에 대한 크레딧을받을 수 있습니다!

+0

개체해야 use ":"not "="사용하면 param() 또는 serialize()를 사용하는 대신 객체를 그대로 전달할 수 있어야합니다. – scrappedcola

+0

참고 Param()은 Jquery에 의해 내부적으로 사용되므로 수동으로 수행 할 필요가 없습니다. – scrappedcola

+0

"="을 ":"로 변경하면 오류가 발생합니다. 해쉬가 어떻게 만들어지고 있는가? { \t \t \t \t 데이터 항목 = [I] (; 나는 data.length입니다

답변

1

"해시"는 JSON으로 직렬화 할 수있는 유효한 JavaScript 개체 리터럴이 아닙니다.

당신은 단순히 actualy JS를 사용하는 무슨과에서 변환은 다음과 같이 개체 리터럴 :

var data = { 
    method: 'methodName', 
    setting1: 90, 
    setting2: 30, 
    setting2: 19 
} 
그런 다음 당신의 AJAX 호출이 필요없는 수동 직렬화에 전달

:

jQuery.post(url, data, callback); 

function callback(d) { 
    //stuff 
} 
+0

이것은 해시가 어떻게 만들어 지는지입니다 :'settings_hash = {}; for (var i = 0; i

+1

거기서 구성하는 것은 유효한 JS 개체이며 아무 것도 변경할 필요가 없습니다. "method"와 같은 추가 속성을 추가하고 싶다면, 나중에'settings_hash.method = "blah";를 수행 할 수 있습니다. 또한'= '할당을 사용 했음에도 불구하고 객체가 정확한 방식으로 표현됩니다 나는 위에서 말한 :'{property : value}'. 이것은 문자열로만 표현할 때 JSON (JavaScript Object Notation) 또는 문자열이 아닌 객체 리터럴로 표현 될 때 JavaScript Object Literal입니다. –