【发布时间】:2017-08-11 19:35:39
【问题描述】:
我正在发布一个从 Angular 到 PHP 的数组。我发送的数组是这样的[92,70,86,62,75,84,95] 但在 php 中它变成了这样 - “[92,70,86,62,75,84,95]”。
我预期的 php 输出是
{ 用户 ID:假, 数据:[92,70,86,62,75,84,95] } 我得到的输出是 { 用户 ID:假, 数据:“[92,70,86,62,75,84,95]” }
从角度发布数据的代码是
$scope.data = [92,70,86,62,75,84,95];
$http({
method: 'POST',
url: 'http://localhost/learn_php/api/api_set_data/',
data: $scope.data,
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
})
.success(function(data) {
console.log(data);
});
php中的代码是
public function api_set_data(){
$array['user_id'] = $this->session->userdata('user_id');
$array['data'] = file_get_contents("php://input");
$serializedData = serialize($array);
file_put_contents(APPPATH."assets/get_values.txt", $serializedData);
echo json_encode($array);
}
【问题讨论】:
-
application/x-www-form-urlencoded不能处理任何复杂的结构,只能处理键值字符串对。考虑改用application/json。无论哪种方式,您都需要在您的 PHP 代码中json_decode()file_get_contents()的结果。 -
但它显示以下错误“XMLHttpRequest 无法加载 localhost/learn_php/api/api_set_data。在预检响应中 Access-Control-Allow-Headers 不允许请求标头字段 Content-Type。”
-
所以在服务器端配置你的“Access-Control-Allow-Headers”
-
@UsamaIshaque 无论哪种方式,您都应该得到该错误。这表明该表单是从 localhost 以外的其他地方提供的。
-
解决了标头问题以及使用 json_decode 而不是 json_encode 但仍然得到相同的输出 { user_id: false, data: "[73,66,75,70,94,100,60,89, 69,79]" }