2011-02-18 2 views
6

jQuery의 AJAX 메소드를 통해 네트워크를 통해 보내려는 Javascript에서 JSON 스타일 배열을 수동으로 만들려고 필사적으로 노력하고 있습니다.Javascript jQuery AJAX 용 JSON 해시 배열 만들기

var fieldsobj = {fields:[]} 
$(".fact_field", fact).each(function(index, field){ 
    var index = $(field).attr("data-index"); 
    var name = $(".fact_field_label", field).text().trim(); 
    var value = $(".fact_field_value", field).text().trim(); 
    fieldsobj["fields"].push({index:index, name:name, value:value}); 
}); 
//... 
$.ajax({ 
    type: 'PUT', 
    url: url, 
    data: fieldsobj, 
    success: function(data){... 
    }, 
    complete: function(){... 
    } 
}); 

내가 원하는 것은 다음과 같다 :

{fields => [{index:0, name:1, value:2},{...},{...}]} 

내가 얻을 것은이 :

{"fields"=>{"0"=>{...}, "1"=>{..}, "2"=>{...}, "3"=>{...}} 

내가 뭘 잘못?

답변

7

객체를 data 속성으로 전달하면 jQuery가 URL 인코딩 된 양식 매개 변수 (예 : foo=bar&moo=too)를 본문에 전달합니다. 내가 원하는 것은 JSON을 전달하는 것입니다.

$.ajax({ 
    type: 'PUT', 
    url: url, 
    data: JSON.stringify(fieldsobj), 
    contentType: "application/json", 
    success: function(data){... 
    }, 
    complete: function(){... 
    } 
}); 

을 그리고 contentType 속성을 설정하는 것을 잊지 마세요 :

잡아는 json2.jswritten by uncle Crockford 및 사용 JSON.stringify (즉 라이브러리는 아직 지원하지 않는 브라우저의 기능을 제공합니다)! PHP는 측면에서, 당신은 원시 본문 내용을 디코딩 json_decode를 사용할 수 있습니다

$fieldsobj = json_decode(@file_get_contents('php://input')); 
+0

@Darko Z :'serialize'를'stringify'로 정정 해주셔서 감사합니다. –

+0

좋아요! 전에 JSON.stringify를 시도했지만 콘텐츠 유형을 잊어 버렸습니다. – Denny

0

이 도움이 될 수 있습니다.

<ul> 
    <li id="p1" data-age="40">John</li> 
    <li id="p2" data-age="28">Jack</li> 
    <li id="p3" data-age="50">Nash</li> 
</ul> 

<script> 
var a = []; 
$("li").each(function(i){ 
    var o = {}; 
    o.id = $(this).attr("id"); 
    o.age = $(this).attr("data-age"); 
    o.name = $(this).text(); 
    a.push(o); 
}); 
console.log(a); 
//var a = [{id:"p1",age:40, name:"John"},{id:"p2",age:28, name:"Jack"},{id:"p3",age:50, name:"Nash"}]; 
</script>