2016-02-13 70 views
0

我使用$ http.post()方法。這裏的代碼如何發佈json數組從angularjs控制器到php頁面

$scope.checkout = function(){ 
     $http({ 
     url:"checkout.php", 
     data : $.param($scope.orders), 
     method : 'POST', 
     headers : {'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8'} 
    }).success(function(data, status, headers, config) { 
     $scope.sdata = data; 
    }).error(function(data, status, headers, config) { 
     $scope.status = status; 
}); 
    } 

我的json數組存儲在$ scope.orders中,我想發佈到checkout.php這是在同一個文件夾中。

而在PHP頁面我的代碼是

<?php 
$data = file_get_contents("php://input"); 
    $postData = json_decode($data); 
    foreach ($postData as $post) { 
    echo $post->name; 
    echo "<br>"; 
    echo $post->price; 
    echo "<br>"; 
    echo $post->quantity; 
    echo "<br>"; 
    echo "<br>"; 
} 
?> 

但它不工作。

請告訴我如何重定向到checkout.php。基本上我發佈這個數據在一個按鈕上點擊,我想在數據發佈後重定向到checkout.php。

回答

0

您的php正在期待數據作爲內容類型application/json發送,這是$http的默認值。

但是要更改默認的內容類型application/x-www-form-urlencoded

如果你想$http保持不變,您需要使用$_POST沒有file_get_contents()

如果你想在PHP保持不變,你需要從$http中刪除內容類型標題,而不是使用$.param來序列化數據。

另請注意,如果您想在重定向到ajax後重定向到checkout.php,則重定向將不包含發佈數據,因此您需要將其存儲在會話中以使其工作。否則你可能根本就不需要$http,應該只是使用瀏覽器提交表單而不是攔截髮送與$http

+0

對不起,我是新來的角你能告訴我我將如何在js文件中使用會話變量因爲控制器代碼位於單獨的js文件中。我指的是 –

+0

會話是服務器會話。每次你調用'checkout.php'時,它都是一個新實例,所以如果你重定向到它,那麼數據就不會存在,但如果你使用默認瀏覽器進程提交表單 – charlietfl

+0

我可以使用角度服務在各種頁面中使用變量 –

相關問題