用PHP检索javascript函数中的json

时间:2017-05-26 10:59:29

标签: javascript php jquery json

我想阅读json值。 我编写代码的方式如下所示。 其中x将是$ movieID。

<script>
     function bookBTN(x) {
        <?php $url = 'http://movie.com/movieOne?seatNum=' . x;
         $jsonURL = file_get_contents($url);
         $obj = json_decode($jsonURL,true); 
            foreach($obj as $data)
            {
             $res = $data['avail'];
            }
           if ($res == "yes"){
             echo "alert ('SUCESS');";
           }
           else
           {
             echo "alert ('FAIL');";

           }


        ?>

     }
</script>

但是,当我尝试点击按钮时,它不会弹出警告框。 如果我删除了函数内的json检索器,那么警报框将会正常工作。为什么会这样,我该如何解决这个问题?

数据:

{"avail":"yes"}

3 个答案:

答案 0 :(得分:1)

假设PHP有效(虽然取决于它如何将x视为文字,但它可能不会),那么页面上的输出将是<script>function bookBTN(x) { alert('SUCESS')';}</script><script>function bookBTN(x) { alert('FAIL')';}</script>。我怀疑这是你的意图。你不能像这样在脚本之间交换x

PHP在服务器上运行,JavaScript在完全独立的上下文中在浏览器上运行。 PHP运行以创建页面内容,其中可能包括一些HTML,CSS,JS等.PHP脚本的输出是一个页面,然后发送到客户端计算机上的浏览器,以便显示和交互。这意味着您可以使用PHP来生成一些静态JS,然后在页面加载时稍后运行

如果您希望在加载页面后在JS和PHP之间进行某些交互,则需要使用AJAX调用以同时理解的方式在客户端和服务器之间发送数据。

但是,对于这个特别简单的例子,你可能根本不需要任何PHP,因为假设这个删除服务器支持CORS,你可以直接从JavaScript使用AJAX调用它。请注意,您的PHP代码也与foreach存在逻辑错误,因为它只会匹配最后的&#34;数据&#34;值是否包含&#34;是&#34;,因为该测试在循环之外。

此示例使用jQuery语法执行ajax GET请求并循环遍历数据,但也可以使用vanilla JS执行这两种操作。

编辑:现在很清楚,远程服务器不接受CORS请求。因此,我们需要使用您的PHP服务器作为中介。因此,您的解决方案需要分为两部分。此外,该函数返回的数据结构不是PHP代码段最初建议的那样:

1)您现有的网页,具有相同的代码,但ajax调用已更改为指向您自己的PHP服务器:

<script>
     function bookBTN(x) {
        alert("x = " + x); //you can use this for testing, and remove later
        $.getJSON('http://yourservername/movieOne.php?seatNum=' + x, function(data) { 
          if (data.avail == "yes") {
            alert("Success"); //note correct spelling of "success"
          }
          else { alert("Failure"); } //only if we didn't find anything
        });
     }
</script>

2)服务器上的PHP脚本充当中介。为了示例,我将其称为movieOne.php,以反映它在远程服务器上调用movieOne URL。

<?php
  $seatNum = $_GET["seatNum"]; //retrieve the seat number from the browser ajax request
  $url = 'http://movie.com/movieOne?seatNum=' . $seatNum;
  $result = file_get_contents($url); //make the request to the remote server
  echo $result; //echo the result directly back to the ajax call without processing it. If this doesn't return JSON already, then try using "json_encode($result);" instead
?>

答案 1 :(得分:0)

您不能将JS和PHP用作相同级别的函数。 PHP将在任何JS启动之前执行。因此,您的代码将抛出Undefined constant x,因为JS中的x与PHP中的x不同,而且PHP中的变量必须以$x开头。

对于您的功能,您不需要PHP。使用jQuery Ajax

 function bookBTN(x) {
     $.ajax({
         url: 'http://movie.com/movieOne?seatNum='+x,
         dataType: 'json',
         success: function (obj) {
             var found = false;

             obj.each(function (i, res) {
                 if (res.avail == 'yes') {
                     alert('SUCCESS');
                     found = true;

                     return false;
                 }
             });

             if (!found) {
                 alert('FAIL');
             }
         }
     });
 }

答案 2 :(得分:0)

您可能希望将url称为jsonp数据类型,因为它看起来会从其他域调用url。 请注意,$ .ajax是一个jquery函数。

$.ajax({
	url: "http://movie.com/movieOne?seatNum=" + x,
	jsonp: "callback",
	dataType: "jsonp",
	data: {query: "foo"},
	success: function (response) {
		// do whatever you want with the response data
	}
});