2016-10-20 4 views
0

각도 js와 php를 사용하고 있습니다. js 파일에서 컨트롤러에 게시 할 배열이 있습니다. 배열을 JSON으로 변환하고 아래 데이터를 전달하려고 시도했습니다.PHP에서 데이터 압축 풀기

var update = { 
       method: 'POST', 
       url: apiPoint.url + 'up.php', 
       headers: { 
       'Content-Type': 'application/x-www-form-urlencoded' 
      }, 
       params :{ 
         alldatas: JSON.stringify($scope.alldata) , 

         section : 'A', 
       } 

이렇게하면 414 개의 상태 오류 코드가 표시됩니다. URL이 너무 깁니다. 그래서 JSONC를 사용하여 데이터를 포장하려고 시도했습니다. jsonc.min.js를 사용하고 아래 코드를 업데이트했습니다.

var update = { 
       method: 'POST', 
       url: apiPoint.url + 'up.php', 
       headers: { 
       'Content-Type': 'application/x-www-form-urlencoded' 
      }, 
       params :{ 
         alldatas: JSONC.pack($scope.alldata) , 

         section :'A', 
       } 

이제 내 데이터가 URL을 통과하고 컨트롤러에서 데이터를 가져옵니다. 그러나 나는 데이터를 풀 수 없다. 데이터 압축을 풀어주세요.

+2

왜 URL을 통해 데이터를 전달 했습니까? –

+0

Cliptwo라는 테마를 사용하고 있습니다. 우리는 이렇게 코딩하고 있습니다. 다른 생각? – athi

답변

0

표준 $http 구성 요소를 사용하고 있고 언급 된 JavaScript 개체가 configuration object을 의미합니다.

요청 URI length is limited이 (가) 있으므로 요청 본문 인 POST를 통해 JSON 데이터를 전달해야합니다. params 옵션은 GET으로 직렬화됩니다.

var req = { 
    method: 'POST', 
    url: apiPoint.url + 'up.php', 
    data: 'alldatas=' + encodeURIComponent(JSON.stringify($scope.alldata)), 
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' } 
    params: { section : 'A' } 
}; 

$_POST 자동 전역이 application/x-www-form-urlencoded하고 만 가득 : 쿼리 문자열을 구축해야 application/x-www-form-urlencoded 콘텐츠 유형에 대해

var req = { 
    method: 'POST', 
    url: apiPoint.url + 'up.php', 
    data: { alldatas: $scope.alldata }, 
    // you might even stringify it 
    //data: JSON.stringify({ alldatas: $scope.alldata }), 
    headers: { 'Content-Type': 'application/json;charset=utf-8' }, 
    params: { section : 'A' } 
}; 

$http(req).then(function (response) { 
    console.log(response.data); 
}); 

: 그래서 당신은 data 옵션으로 데이터 (alldatas)를 이동해야 multipart/form-data 콘텐츠 형식 다른 콘텐츠 유형은 php://input 스트림을 통해 사용할 수 있습니다.

if (!empty($_POST)) { 
    $obj = $_POST; 
} else { 
    $json = file_get_contents('php://input'); 
    $obj = json_decode($json); 
} 
if ($obj) { 
    header('Content-Type: application/json'); 
    echo json_encode($obj); 
} 
exit(); 
+0

번호. up.php에서 섹션 만 가져옵니다. alldatas가 정의되지 않았습니다 – athi

+0

@athi, 거기 있는지 확인해 보셨습니까 :'var_dump ($ _ POST);'? HTTP 요청 헤더를 확인 했습니까? 실제로 POST 데이터를 서버로 보냅니 까? 어쩌면 어떤 종류의 캐시가 효과가있을 수 있습니다. JSON.stringify (...) 대신에 테스트 문자열을 보내보십시오. 어쩌면 인수 ('$ scope.alldata')에 유효하지 않은 데이터가있을 수도 있습니다 (또는 단지 정의되지 않은 문자열입니다). 주요 개념은 서버로 보내지는 데이터를'data' 섹션으로 옮기는 것입니다. –

+0

$ _POST가 null입니다. – athi