2016-10-20 9 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にシリアル化されています。 ですから、dataオプションに(alldatas)にデータを移動する必要があります:あなたは、クエリ文字列を構築する必要があり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); 
}); 

$_POSTスーパーグローバルのみapplication/x-www-form-urlencodedのために満たされている

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' } 
}; 

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

関連する問題