子域上的HTTP POST无法正常工作

时间:2015-12-07 13:18:04

标签: php angularjs .htaccess

奇怪但是我的服务器端脚本没有为我的子域拾取我的$_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”   访问。

2 个答案:

答案 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 [];
        });
    }