web-dev-qa-db-ja.com

Angularjs $ http POST空の配列をリクエストする

以下 $http requestは正常に実行されますが、反対側のPHPスクリプトは空の$_POST配列は「test」と「testval」を受け取る必要があります。何か案は?

$http({
    url: 'backend.php',
    method: "POST",
    data: {'test': 'testval'},
    headers: {'Content-Type': 'application/x-www-form-urlencoded'}
    }).success(function (data, status, headers, config) {
    console.log(data);

    }).error(function (data, status, headers, config) {});
14
hawkharris

その単純なデータだけを送信したい場合は、次のことを試してください。

$http({
    url: 'backend.php',
    method: "POST",
    data: 'test=' + testval,
    headers: {'Content-Type': 'application/x-www-form-urlencoded'}
    }).success(function (data, status, headers, config) {
        console.log(data);

    }).error(function (data, status, headers, config) {});

そして、phpの部分は次のようになります:

<?php
    $data = $_POST['test'];
    $echo $data;
?>

それは私のために働いています。

18
Gabor Kako

より単純化された方法:

myApp.config(function($httpProvider) {
    $httpProvider.defaults.transformRequest = function(data) {        
        if (data === undefined) { return data; } 
        return $.param(data);
    };
    $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8'; 
});

次の行と前のコンマを削除します。

headers: {'Content-Type': 'application/x-www-form-urlencoded'}

そして、データは$ _POSTに表示されます。ファイルをアップロードする場合にのみその行が必要です。その場合、データ変数を取得するために本文をデコードする必要があります。

3
KGolding

私はここで私の解決策を見つけました http://www.peterbe.com/plog/what-stumped-me-about-angularjs 。 「AJAXはjQueryのように機能しません」セクションにコードがあり、これで問題が解決しました。

2
notMyName