奇怪但是我的服务器端脚本没有为我的子域拾取我的$_POST
变量是有原因的吗?
AngularJS代码;
$scope.getLpost = function () {
return $http({
method: 'post',
url: "http://blog.example.co.uk/blog/php/resources/post-fetch.php",
data: $.param({ 'id' : $scope.postid }),
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).then(function successCallback(response) {
// this callback will be called asynchronously
// when the response is available
return response.data.data;
}, function errorCallback(response) {
// called asynchronously if an error occurs
// or server returns response with an error status.
return [];
});
}
这是我的服务器端脚本;
<?php
include($_SERVER["DOCUMENT_ROOT"] . "/blog/php/blog-db.php");
include($_SERVER["DOCUMENT_ROOT"] . "/blog/php/blog-functions.php");
try {
$data = array();
$post_id = $_POST['id'];
$query = "SELECT * FROM blog_posts WHERE `blog_posts`.`id` = $post_id";
$result = mysqli_query($cms_connection, $query);
if($result) {
while($row = mysqli_fetch_assoc($result)) {
$row['post_seo'] = seoUrl($row['post_title']);
$data['data'][] = $row;
}
}
$data['success'] = true;
echo json_encode($data);
exit;
} catch (Exception $e){
$data = array();
$data['success'] = false;
$data['message'] = $e->getMessage();
echo json_encode($data);
exit;
}
?>
正如您所看到的,我正在从客户端发送id
。
但这从未被接受过。
我在我的应用程序中尝试了这个,并且还使用了POSTMAN,但我得到的只是{"success":true}
仅供参考我在.htaccess
在POSTMAN中,我必须使用
http://www.example.co.uk/path/to/script.php
代替http://blog.example.co.uk/path/to/script.php
未收到$_POST
的任何一种方式。如果我在查询中手动输入变量并运行它,我会得到所需的结果。
@Steve
这是我从POSTMAN获得的。据我所知,我的id
没有通过;
{"success":true,"debug":{"post":[],"sql":"SELECT * FROM blog_posts WHERE
{blog_posts {1}} ID为.
这是= "}}
规则
.htaccess
我也是在我的控制台中得到这个:
原点“http://www.example.co.uk”的重定向已被阻止 通过跨源资源共享策略加载:否 请求中存在“Access-Control-Allow-Origin”标头 资源。因此不允许来源“http://blog.example.co.uk” 访问。
答案 0 :(得分:1)
我遇到了类似的问题$_POST
未被服务器接听。
$request = $_POST;
空了,但是
$request = json_decode(file_get_contents('php://input'));
给了我AJAX请求的内容。这可能与AngularJS总是在幕后对其AJAX调用的主体进行字符串化这一事实有关。
答案 1 :(得分:0)
// angular js使用有效负载方法发布数据, //如果您使用url编码标头,则需要转换 //对象发布到常规url结构。 基本上我们用reqular方法发送数据并将发送的数据转换成url编码形式,发送数据时也不需要param部分
$scope.getLpost = function () {
return $http({
method: 'post',
url: "http://blog.example.co.uk/blog/php/resources/post-fetch.php",
data: { 'id' : $scope.postid },
headers: {'Content-Type': 'application/x-www-form-urlencoded'}, //header to accept the encoded url sent basically in string format
transformRequest: function (obj) { //this part of code will transform any data being sent to regular url encoded form
var str = [];
for (var p in obj)
str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p]));
return str.join("&");
}
}).
then(function successCallback(response) {
// this callback will be called asynchronously
// when the response is available
return response.data.data;
},
function errorCallback(response) {
// called asynchronously if an error occurs
// or server returns response with an error status.
return [];
});
}