如何将 PHP 数组返回到调用它的 JavaScript 函数

How can I return a PHP array to the javascript function that called it

本文关键字:调用 JavaScript 函数 返回 PHP 数组      更新时间:2023-09-26

..打算以另一种方式尝试..

指向另一个页面的链接对我来说不是很有用。.我已经看过其中的大多数,但无法使它们适应我需要的东西。

我不熟悉ajax或jQuery。

我真的可以使用一些帮助来提供针对此特定问题的详细代码示例。 提前谢谢..

我有一段代码叫做:JSON_generator.php

<?php
require_once 'EasyWebFetch.php';
$callback = isset($_GET['callback']) ? $_GET['callback'] : 'mymap.weatherhandler';
$station = isset($_GET['rid']) ? $_GET['rid'] : 'FWS';
$product = isset($_GET['product']) ? $_GET['product'] : 'NCR';
$nframes =  isset($_GET['frames']) ? $_GET['frames'] : 10;
if (strlen($product) != 3 || strlen($station) != 3) { exit; }
// fetch directory listing
$wf = new EasyWebFetch;
if (!$wf->get("http://radar.weather.gov/ridge/RadarImg/$product/$station/")) {
  print $wf->getErrorMessage();
  exit;
}
$page = $wf->getContents();
// echo $page."'n'n";
$size = preg_match_all( "/href='"({$station}['d_]+{$product}'.gif)'"/" , $page, $match);
$files = $match[1];
$nframes = min(count($files), $nframes);
$files = array_slice($files, -$nframes);
echo $callback."'n('n{'ndirectory:'n['n";
for ($i=0; $i < $nframes; $i++) {
  echo "'"ridge/RadarImg/$product/$station/$files[$i]'",'n";
}
echo "]'n}'n)'n;"
?>

当像这样从命令行调用时...

http://example.com/mypath/JSON_generator.php?&?callback=CallBack&product=NCR&rid=JAX&frames=5

但我真正需要的是让那些.gif路径/文件/名称从首先调用 php 的 javascript 函数中"可用"。 它们需要作为数组中的项目进行访问。

我无法弄清楚 javascript 函数调用来做到这一点。

...

像这样的东西,但显然不是这个..

function Feed (whichproduct, whichsite) {
 var filelist = [];
 var siteimages = filelist("http://example.com/mypath/JSON_generator.php?&product=whichproduct&rid=whichsite&frames=5");
..then..
//alert (filelist [1]); .. should return something like  "ridge/RadarImg/NCR/JAX/JAX_20130128_2354_NCR.gif"
}

显然,我是一个初学者,所以完整的答案对我来说比代码片段更有价值。

底线:

我需要一个javascript函数,它可以从php脚本中提取每个.gif名称,并将它们带回javascript"var",我可以在html文件中的其他地方使用。

谢谢丹尼斯

编辑.. 编辑删除.. 想通了..

我最初会使用 jQuery 来回答,因为这让事情变得非常简单,但我稍后会更新原版 Javascript 实现。

Feed函数中,使用 jQuery 方便的 $.ajax 方法进行 AJAX 调用。

function Feed (whichproduct, whichsite) {
    $.ajax({
        "url": "http://mysite.com/mypath/JSON_generator.php?&product=whichproduct&rid=whichsite&frames=5"
        "type": "GET",
        "dataType": "json",
        "success": function( data, status, xhr ){
            alert( data[1] );
        }
    });
}
在 PHP 中,在

格式良好的 PHP 数组上使用 json_encode(只需推送到array(),而不是直接回显 url 和逗号等)。

最后,print json_encode( $yourArray ).

Vanilla Javascript的更新:

与其在这里复制(广泛的)javascript,不如通过@Richard H链接到一个不错的SO答案。 希望对您有所帮助,如果您不考虑使用 jQuery!

json_encode($array);

要走的路。json_encode函数编写一个JSON对象,以便将其传递给Javascript。

然后在 Javascript 中,您可以安装(如果您尚未使用它)jQuery 并使用 jQuery.parseJSON() 解析 JSON 字符串,该字符串返回一个可供使用的 JavaScript 对象。

为了补充已经发布的答案,这里有两个问题:

  • 您的响应不是 JSON,而是 JSONP - 请务必以这种方式对待它。JSON看起来像这样:{ ... },模仿JSON的数据结构,旨在被解析;JSONP有一个围绕它的函数调用,并打算执行:callback({ ... })
  • AJAX 代表异步 JavaScript 和 XML。并非首字母缩略词的所有部分仍然相关,但异步性非常大。这意味着您无法在请求 AJAX 调用的同一函数中获取 AJAX 调用的结果:您需要设置一个回调,该函数将在结果到达时接收结果。