javascript - 使用 PHP 在 javascript 函数中检索 json

标签 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"}

最佳答案

假设 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,您可以简单地使用 AJAX 从 JavaScript 直接调用它。请注意,您的 PHP 代码在 foreach 中也存在逻辑错误,因为它只会匹配最后一个“data”值以查看它是否包含“yes”,因为该测试位于循环之外。

此示例使用 jQuery 语法来执行 ajax GET 请求并循环访问数据,但也可以使用普通 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,以反射(reflect)它调用远程服务器上的 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
?>

关于javascript - 使用 PHP 在 javascript 函数中检索 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44199867/

相关文章:

javascript - jQuery empty() 与 remove()

javascript - RequireJS 使用 AMD 模块随机加载错误的文件名

Javascript:removeChild 不起作用

PHP启动: oci8: Unable to initialize module

javascript - 使用ajax调用PHP脚本

javascript - 使用 JavaScript 和 jQuery 开发复杂网页的最佳实践

jquery - Gridster 通过拖入 div 来删除小部件

javascript - 如何在字符之前获取术语?

javascript - undefined reference - jQuery 选择器与 JavaScript 变量

php - 使用 PHP 仅显示数据库中的一项