2010-03-03 9 views
3

에서 나는 기본적으로 jquery.ajax()를 통해 PHP 스크립트에 자바 스크립트 객체를 전달하기 위해 노력하고있어 :JSON으로하고 json_decode PHP와 자바 스크립트

var bigArray = new Object(); 
//Dode 
//Start loop 
bigArray[x] = {name: exname, id: exID, order:e, set: setBox, inc: incBox, example: exampleBox, day: i}; 

은 그래서 꽤 많은 이들 객체의 배열입니다.

var anotherTest = $.toJSON(bigArray); 
    var ajxFile = "routineajax.php"; 
    $.ajax({ 
     type: 'POST', 
     processData: false, 
     url: ajxFile, 
     data: anotherTest, 
     success: function(data) { 
      $('#result').html(data); 
      alert('Load was performed.'); 
     } 
    }); 
}); 

PHP의 측 스크립트

print_r($_POST); 
$params = json_decode($_POST); 
print_r($params) 

는 Ajax 호출을 통해 가고, 나는 Firebug에서 볼 수 있지만, print_r($_POST)는 빈 배열을 반환합니다. 반면에 $.ajax 함수와 PHP 스크립트에서 모두 $_GET으로 변경하면 작동합니다.

경고 : 내 주요 문제는 내가이 오류 메시지 얻고있다 json_decode() 매개 변수 1 문자열이 될 것으로 기대를 배열 내가이 문제를 해결하려면 어떻게

에 주어진?


PHP 파일이 조각을 추가 한 후

$data = file_get_contents('php://input'); 
    var_dump($data); 
    var_dump(json_decode($data)); 

내가이 출력을 얻고있다

string'{"0"{"name":"Decline`Abs","id":"54","order":0,"set":"","inc":"","example":"","day":1}}' (length=87)` 
    object(stdClass)[2] 
     public '0' => 
     object(stdClass)[4] 
      public 'name' => string 'Decline Abs' (length=11) 
      public 'id' => string '54' (length=2) 
      public 'order' => int 0 
      public 'set' => string '' (length=0) 
      public 'inc' => string '' (length=0) 
      public 'example' => string '' (length=0) 
      public 'day' => int 1 

그래서 적어도 통해거야, 나는 액세스하는 방법을 잘 모르겠어요 그래도 올바른 방향으로 나아가십시오!

+0

print_r ($ _ GET)을 수행 한 결과로 질문을 편집 할 수 있습니까? 네가 아래에 있다는 것을 알지만 나에게 불명확하다. – notJim

답변

3

문제는 정상적으로 POST 데이터가 key=value&key2=value2으로 인코딩되어 전송되고 JSON으로 전송한다는 것입니다. 다음과 같이 원시 게시물 데이터에 액세스 해보세요.

$data = file_get_contents('php://input'); 
var_dump($data); 
var_dump(json_decode($data)); 

이 작동하는지 확인해보세요. 그렇지 않은 경우 귀하의 질문에 답을 게시하십시오.


아래의 설명과 OP에 추가 된 내용을 기반으로합니다.

$data은 정확하게 복사하여 붙여 넣기를 했습니까?내가 물어 보는 이유는 이것이다 : string'{"0"{"name" 나에게 똑바로 보지 않는다. 유효하지 않은 JSON 또는 올바르게 인코딩 된 POST 문자열입니다. 복사하고 붙여 넣을 때 일부 문자가 인코딩되었을 수 있습니다.

어느 쪽이든, 이제 원하는 결과를 얻으실 수 있습니다. stdClass은 일반 개체 구문을 사용하여 액세스 할 수있는 데이터를 넣는 빈 컨테이너 일뿐입니다. 이 경우 $data->{0}->name을 수행해야합니다. 왜냐하면 그 이유는 0입니다. $data = json_decode($data, true)을 수행하면 연관 배열이되고 POST'ed 데이터에 $data[0]['name']으로 액세스 할 수 있습니다.

이 문제를 계속 파악하려면 Ajax 요청을 수행하기 바로 전에 window.console.dir(data)의 결과를 표시하고 var_dump(data) 일 때 복사하여 붙여 넣을 페이지 원본을 확인해야합니다. window.console.dir(data)은 Firebug 창에 data의 속성을 표시합니다 (방화 광을 사용하고 있습니까?). 또한 Chrome의 디버거에서 작동하며, 다른 경우에도 사용할 수 있습니다. 내가 말했듯이, 이미 필요한 것을 얻고있는 것처럼 보이므로 조사가 반드시 필요한 것은 아닙니다.

+0

I는 OP의 출력을 추가했다.이 움직일 것으로 보인다 지금 올바른 방향으로 그래도 그래? – mike

+0

위의 추가 사항을 참조하십시오. – notJim

+0

그럼 stdclass에 대해 궁금한 점이 있으시면 http://stackoverflow.com/questions/931407을 방문하십시오. – notJim

0

충분히 명확하지 않습니까? json_decode()은 매개 변수 1을 배열이 아니라 문자열로 예상합니다. 그러나 $_POST$_GET은 항상 배열입니다. 이 배열의 멤버를 json_decode()에 전달할 수 있습니다. true로

echo "<pre>"; 
print_r($_GET); 
echo "</pre>"; 
+0

나는이 문제가 toJSON과 관련이 있다고 생각한다. $ _GET 출력이다. 배열 ([{ "0": { "name": "Bent_Over_Rows", "27", "order": 0, "set": "", "inc": "", "example": "", "day : 1}}] =>) 0 => 요소 대신. 하지만 적어도 배열 오류가 사라졌습니다 ... – mike

+0

$ _POST가 print_r에 표시되지 않는 이유는 무엇입니까? – mike

0

전원을 켜고 processData :

이 조각을 사용하여 배열의 내용을 참조하십시오. JSON이 제대로 전달되지 않는다고 생각합니다. 또한 JSON으로 전달되지는 않지만 JSON의 핵심 값 쌍은 얻을 때 $_POST의 내용이됩니다.

bigArray의 값은 string으로 쉽게 변환 할 수 있습니까? DOM 요소 등을 전달하는 경우 문제가 발생할 것입니다.

+0

processData를 켜고 PHP가 $ _POST를 선택하지 않았습니다. 나는 방화범이 끌리기 때문에 여기를 지나고 있다는 것을 알고있다 : 매개 변수 신청서/x-www-form-urlencoded { "0": { "name": "Abs Decs Abs ... \t 오직 $ _GET 만 통과했다. .. – mike

+0

bigArray를 JSON으로 변환하지 마십시오 .jQuery.ajax()는 데이터 매개 변수에 대한 객체를 기대합니다. http://api.jquery.com/jQuery.ajax/ – UltimateBrent

+0

POST를 통해 bigArray를 전송하면이 부분이 이됩니다. 어레이 ( [0] => [개체 개체] [1] => [개체 개체] )가 통해 객체를 전달 didnt하는 것처럼 그래서 보인다. – mike