GVKun编程网logo

从Node.js POST到PHP(nodejs用post传数据)

15

如果您想了解从Node.jsPOST到PHP和nodejs用post传数据的知识,那么本篇文章将是您的不二之选。我们将深入剖析从Node.jsPOST到PHP的各个方面,并为您解答nodejs用pos

如果您想了解从Node.js POST到PHPnodejs用post传数据的知识,那么本篇文章将是您的不二之选。我们将深入剖析从Node.js POST到PHP的各个方面,并为您解答nodejs用post传数据的疑在这篇文章中,我们将为您介绍从Node.js POST到PHP的相关知识,同时也会详细的解释nodejs用post传数据的运用方法,并给出实际的案例分析,希望能帮助到您!

本文目录一览:

从Node.js POST到PHP(nodejs用post传数据)

从Node.js POST到PHP(nodejs用post传数据)

我正在尝试将一些数据从Node.js应用程序发布到PHP脚本。目前,我只是在构建概念证明,但无法将实际数据传递到PHP端。请求通过,我得到200,但PHP认为$
_POST数组为空。

这是我的节点代码:

// simple end point just for testingexports.testPost = function(request, response) {    data = request.body.data;    postToPHP(data);    response.end(data);}function postToPHP (data) {    var http = require(''http'');    var options = {        host : ''localhost'',        port : 8050,        path : ''/machines/test/index.php'',        method : ''POST'',        headers : {            ''Content-Type'' : ''application/json'',            ''Content-Length'' : Buffer.byteLength(data)        }    };    var buffer = "";    var reqPost = http.request(options, function(res) {        console.log("statusCode: ", res.statusCode);        res.on(''data'', function(d) {            console.info(''POST Result:\n'');            //process.stdout.write(d);            buffer = buffer+data;            console.info(''\n\nPOST completed'');        });        res.on(''end'', function() {            console.log(buffer);        });    });    console.log("before write: "+data);    reqPost.write(data);    reqPost.end();}

同样,该请求将其发送到localhost:8050 / machines / test / index.php,但是当我执行$
_POST的var_dump时,它是一个空数组。

[29-Jan-2014 21:12:44] array(0) {}

我怀疑我在.write()方法上做错了什么,但我不太清楚该怎么办。对于我所缺少或做错的任何事情,我们将不胜感激。

* 更新:

正如一些评论指出的那样,使用file_get_contents(’php:// input’); 确实可以在PHP端获取数据,但是我仍然希望能够直接访问$
_POST数组。

答案1

小编典典

由于您正在发送数据,因此Content-Type:application/json您将需要读取原始输入,因为php不知道如何将json读入_GET和_POST之类的全局变量中,除非您有一些php扩展来做到这一点。

您可以使用querystring库将对象解析为名称-
值对查询字符串,Content-Type:application/x-www-form-urlencoded然后与之进行传输,以便将数据解析为全局变量

var data = {   var1:"something",   var2:"something else"};var querystring = require("querystring");var qs = querystring.stringify(data);var qslength = qs.length;var options = {    hostname: "example.com",    port: 80,    path: "some.php",    method: ''POST'',    headers:{        ''Content-Type'': ''application/x-www-form-urlencoded'',        ''Content-Length'': qslength    }};var buffer = "";var req = http.request(options, function(res) {    res.on(''data'', function (chunk) {       buffer+=chunk;    });    res.on(''end'', function() {        console.log(buffer);    });});req.write(qs);req.end();

Angular HTTP post到PHP和未定义

Angular HTTP post到PHP和未定义

我有一个带有标记ng-submit =“login()

该函数在javascript中调用得很好。

function LoginForm($scope,$http)
{
    $http.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded; charset=UTF-8';

    $scope.email    = "fsdg@sdf.com";
    $scope.password = "1234";

    $scope.login = function()
    {
        data = {
            'email' : $scope.email,'password' : $scope.password
        };

        $http.post('resources/curl.PHP',data)
        .success(function(data,status,headers,config)
        {
            console.log(status + ' - ' + data);
        })
        .error(function(data,config)
        {
            console.log('error');
        });
    }
}

我从PHP文件得到200 OK回应,但是,返回的数据说,电子邮件和密码是未定义的。这是所有的PHP我有

<?PHP
$email = $_POST['email'];
$pass  = $_POST['password'];
echo $email;
?>

任何想法为什么我得到未定义的POST值?

编辑

我想指出,因为这似乎是一个流行的问题(但它是旧的),.success和.error已被弃用,你应该使用.then作为@james Gentes指出在commments

angularjs .post()将Content-type头部默认为application / json。您正在覆盖此以传递表单编码的数据,但是您不会更改您的数据值以传递适当的查询字符串,因此PHP不填充$ _POST,正如您所期望的。

我的建议是只使用application / json的默认angularjs设置为标题,在PHP中读取原始输入,然后反序列化JSON。

这可以在PHP中实现这样:

$postdata = file_get_contents("PHP://input");
$request = json_decode($postdata);
$email = $request->email;
$pass = $request->password;

或者,如果您严重依赖于$ _POST功能,您可以形成一个查询字符串,如email=someemail@email.com\u0026amp; password = somepassword,并将其作为数据发送。确保此查询字符串是URL编码的。如果手动构建(相对于使用像jQuery.serialize()),Javascript的encodeURIComponent()应该为你做的伎俩。

HTML表单POST到PHP页面

HTML表单POST到PHP页面

好的…我创建了一个form.html页面.它要求用户输入6个文本字段.表单POST到一个名为myform.PHP的单独页面. myform.PHP页面只是返回用户输入的值.但是,当我单击提交时,我只是在屏幕上弹出myform.PHP源代码.

<div>
        <form action="myform.PHP" method="post">
            Name: <input name="name" type="text" size="25" />
            Course: <input name="course" type="text" size="25" />
            Book: <input name="book" type="text" size="255" />
            Price: <input name="price" type="text" size="7" />
            Email: <input name="email" type="text" size="255" />
            Phone #: <input name="phone" type="text" size="12" />

            <input name="mySubmit" type="submit" value="submit" />
        </form>
    </div>

<?PHP
$name = $_POST["name"];
$course = $_POST["course"];
$book = $_POST["book"];
$price = $_POST["price"];
$email = $_POST["email"];
$phone = $_POST["phone"];

?>
</head>

<body>
<?PHP
    echo $name;
    ?>
</body>

解决方法:

marc Towler是对的.您需要首先使用PHP的扩展名来解析PHP代码的页面.但我实际上建议您将表单页面和表单处理分开.我建议如下:

myform.PHP:

<!DOCTYPE html>
<html>
<head></head>
<body>   
<div>
    <form action="formprocessor.PHP" method="POST">
        <label>Name: </label>
        <input name="name" type="text" size="25" />

        <label>Course: </label>
        <input name="course" type="text" size="25" />

        <label>Book: </label>
        <input name="book" type="text" size="255" />

        <label>Price: </label>
        <input name="price" type="text" size="7" />

        <label>Email: </label>
        <input name="email" type="text" size="255" />

        <label>Phone #: </label>
        <input name="phone" type="text" size="12" />

        <input name="mySubmit" type="submit" value="Submit!" />
    </form>
</div>
</body>
</html>

formprocessor.PHP:

<?PHP
$name = $_POST["name"];
$course = $_POST["course"];
$book = $_POST["book"];
$price = $_POST["price"];
$email = $_POST["email"];
$phone = $_POST["phone"];

echo $name;
?>

javascript – 从Node.js到PHP的POST

javascript – 从Node.js到PHP的POST

我正在尝试从Node.js应用程序将一些数据POST到 PHP脚本.暂时我只是构建了一个概念证明,但是我无法将实际的数据转移到PHP端.请求通过,我得到200回,但PHP认为$_POST数组是空的.

这是我的节点代码:

// simple end point just for testing

exports.testPost = function(request,response) {
    data = request.body.data;

    postToPHP(data);

    response.end(data);
}

function postToPHP (data) {
    var http = require('http');

    var options = {
        host : 'localhost',port : 8050,path : '/machines/test/index.PHP',method : 'POST',headers : {
            'Content-Type' : 'application/json','Content-Length' : Buffer.byteLength(data)
        }
    };

    var buffer = "";

    var reqPost = http.request(options,function(res) {
        console.log("statusCode: ",res.statusCode);

        res.on('data',function(d) {
            console.info('POST Result:\n');
            //process.stdout.write(d);
            buffer = buffer+data;
            console.info('\n\nPOST completed');

        });

        res.on('end',function() {
            console.log(buffer);
        });
    });

    console.log("before write: "+data);

    reqPost.write(data);
    reqPost.end();

}

再次,请求使它到localhost:8050 / machines / test / index.PHP,但是当我做一个$_POST的var_dump它是一个空数组.

[29-Jan-2014 21:12:44] array(0) {

}

我怀疑我做错了.write()方法,但我不能弄清楚什么.任何关于我失踪或做错误的输入将不胜感激.

*更新:

由于某些注释表示使用file_get_contents(‘PHP:// input’);确实可以在PHP方面获取数据,但我仍然希望直接访问$_POST数组.

解决方法

由于您正在使用Content-Type:application / json发送数据,您将需要读取原始输入,因为PHP不知道如何将json读入全局变量,如_GET和_POST,除非您有一些PHP扩展名.

您可以使用querystring库将对象解析为不能使用Content-Type:application / x-www-form-urlencoded传输的名称 – 值对查询字符串,以便将数据解析为全局变量

var data = {
   var1:"something",var2:"something else"
};
var querystring = require("querystring");
var qs = querystring.stringify(data);
var qslength = qs.length;
var options = {
    hostname: "example.com",port: 80,path: "some.PHP",method: 'POST',headers:{
        'Content-Type': 'application/x-www-form-urlencoded','Content-Length': qslength
    }
};

var buffer = "";
var req = http.request(options,function(res) {
    res.on('data',function (chunk) {
       buffer+=chunk;
    });
    res.on('end',function() {
        console.log(buffer);
    });
});

req.write(qs);
req.end();

javascript – 如何从Node.js中的ajax post返回成功

javascript – 如何从Node.js中的ajax post返回成功

我有这样的功能:
exports.saveAction = function (req,res) {
    var conn = MysqL.createConnection({
        host     : nconf.get("database:host"),//port: 3306,user     : nconf.get("database:username"),password : nconf.get("database:password"),database : nconf.get("database:database"),multipleStatements: true,//ssl: 'Amazon RDS'
    });
    var action = req.body;   
    conn.query('UPDATE actions SET ? WHERE Id = ?',[action,action.Id],function (err,result) {
        conn.end();
        if (err) throw err;
        res.writeHead(200,{ "Content-Type": "application/json" });
        res.end("Updated Successfully");
    });
};

我返回“200”,但它总是返回错误子句如下所示:

$.ajax({
    url: "/api/action/SaveAction",type: "PUT",data: ko.toJSON(self.stripDownObj()),datatype: "json",contentType: "application/json; charset=utf-8",success: function (result) {
        console.log(result);
        if(result.status == 200){
            self.isEditMode(!self.isEditMode());
        }
    },error: function(result){
        console.log(result);
    }
});

注意:SQL查询是成功的,并且保存数据.

解决方法

当您期待JSON时返回JSON
res.end('{"success" : "Updated Successfully","status" : 200}');

接着

$.ajax({
     ....
    datatype: "json",// expecting JSON to be returned

    success: function (result) {
        console.log(result);
        if(result.status == 200){
            self.isEditMode(!self.isEditMode());
        }
    },error: function(result){
        console.log(result);
    }
});

在Node中,您可以随时使用JSON.stringify获取有效的JSON

var response = {
    status  : 200,success : 'Updated Successfully'
}

res.end(JSON.stringify(response));

Express也支持做

res.json({success : "Updated Successfully",status : 200});

它会将对象转换为JSON,并自动传递适当的标题.

关于从Node.js POST到PHPnodejs用post传数据的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Angular HTTP post到PHP和未定义、HTML表单POST到PHP页面、javascript – 从Node.js到PHP的POST、javascript – 如何从Node.js中的ajax post返回成功的相关信息,请在本站寻找。

本文标签: