改变PHP代码以返回JSON值

时间:2017-07-27 16:11:33

标签: javascript php json nativescript

我从我当地的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));
    });
}

问题(S):

我认为问题是它正在寻找要返回的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中发送电子邮件。

编辑2

我继续接受伍德罗的回答,因为这让我更接近解决方案。我还有一点需要仔细研究。 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文件。我完全错过了这个。虽然还有其他重大问题,但这对我来说是一个主要的盲点,经过仔细检查可以轻松解决。

谢谢!

1 个答案:

答案 0 :(得分:1)

您需要对发布的数据进行json_decode ..因为您将其作为JSON有效负载发送到服务器。要获取POST数据,您必须这样做:

$_POST = json_decode(file_get_contents('php://input'), true);