我想阅读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"}
答案 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
}
});