我从我当地的php服务器请求下面的这个PHP页面(welcome.php)。
<html>
<body>
Welcome <?php echo $_POST["name"]; ?><br>
Your email address is: <?php echo $_POST["email"]; ?>
</body>
</html>
我在我的Nativescript应用程序(main-page.js)中请求
exports.postRequest = function() {
http.request({
url: "http://192.168.3.12:8888/php/welcome.php",
method: "POST",
content: JSON.stringify({ name: "test", email: "test@email.com"})
}).then(function(result) {
console.log("Success!");
console.log(JSON.stringify(result));
}, function(error) {
console.error(JSON.stringify(error));
});
}
我认为问题是它正在寻找要返回的JSON值? welcome.php只是在html页面的主体中创建两行。它应该自动解析并转换为JSON吗?是否有一个函数应该将它返回给请求者?如何编辑它以将值返回到.js文件中。我的整个结构刚刚关闭吗?
我在给@Quentin的一条评论中提到,我是否将'结果'记录为普通对象并不重要。结果证明这是不真实的:如果我只是在不使用 JSON.stringify 的情况下输出结果,我会收到以下消息:
JS: Success!
JS: Result (plain)[object Object]
我认为即使在编辑welcome.php之后它仍然是空的:
<html>
<body>
<?php
$_POST = json_decode(file_get_contents('php://input'), true);
?>
Welcome <?php echo $_POST["name"]; ?><br>
Your email address is: <?php echo $_POST["email"]; ?>
</body>
</html>
我认为问题在于我输入的名称&amp;在main-page.js中发送电子邮件。
我继续接受伍德罗的回答,因为这让我更接近解决方案。我还有一点需要仔细研究。 This post可能对我有答案。谢谢大家的贡献!
我能够(在每个人的帮助下)解决我在服务器上的PHP和Nativescript客户端中的.js文件之间的断开连接。感谢@Quentin,@ Woodward和@ MarekMaszay等等。
以下是最终文件: jsonWelcome.php
<?php
$_POST = json_decode(file_get_contents('php://input'), true);
$name = $_POST['name'];
$email = $_POST["email"];
//This outputs to a log in the server specified in the php.ini. I used it
// to see if/what the server was receiving from the .js file. I finally got
// that part down & moved on to outputting the data as JSON below.
error_log("name: " . $name . " email:". $email);
if ( $name == "taylor"){
$data = "YESSSS";
} else {
$data = "NOOO";
}
header('Content-type: application/json'); //I haven't tested without this.
exit (json_encode( $data)); //I needed to use the exit & json_encode together
?>
app / main-page.js (nativescript)
//Note I changed the 'result' to 'data'. I don't think it actually has any impact. I made other major changes.
exports.postRequest = function() {
http.request({
//url: "https://httpbin.org/post",
//url: "https://httpbin.org/post
url: "http://192.168.3.12:8888/php/jsonWelcome.php",
method: "POST",
content: JSON.stringify({name: "testNS", email: "email@nativescript.com"})
}).then(function(data) {
console.log("Success!");
console.log("Result (plain)" + data);
console.log("Result 0" + data[0]);
console.log("Result (json.stringify) " + JSON.stringify(data));
}, function(error) {
console.log("Failure");
console.error(JSON.stringify(error));
});
}
通过单击应用程序运行时,上述两个文件的结果将导致控制台输出以下输出。
JS: Result (json.stringify) {"content":"NOOO","statusCode":200,"headers":{"null":"HTTP/1.1 200 OK","Connection":"close","Content-type":"application/json","Date":"Fri, 28 Jul 2017 11:15:55 -0600","Host":"192.168.3.12:8888","X-Android-Received-Millis":"1501262155358","X-Android-Response-Source":"NETWORK 200","X-Android-Selected-Protocol":"http/1.1","X-Android-Sent-Millis":"1501262155342","X-Powered-By":"PHP/7.1.7"}}
请注意,内容等于“NOOO”,这是我们在这种情况下想要的。现在我已经完成了基本的数据交换,我很高兴。非常感谢!
哦和p.s.我认为除了编辑输入和输入之外的主要问题之一输出是我添加了php标签:
<?php ?>
到我的jsonWelcome.php文件。我完全错过了这个。虽然还有其他重大问题,但这对我来说是一个主要的盲点,经过仔细检查可以轻松解决。
谢谢!
答案 0 :(得分:1)
您需要对发布的数据进行json_decode ..因为您将其作为JSON有效负载发送到服务器。要获取POST数据,您必须这样做:
$_POST = json_decode(file_get_contents('php://input'), true);