使用JSONP将数组从PHP返回到JavaScript

时间:2010-11-09 20:36:13

标签: javascript jquery jsonp

我正在尝试使用JSONP将数组从PHP返回到JavaScript。希望我的代码能够准确地证明我正在尝试做什么,因为我甚至不确定如何说出来......

我的PHP文件,端口80,因此需要使用JSONP而不是JSON(我已经尝试过了) 我不确定我是否正确地形成$ _GET变量,我很确定它是错的,但我缺乏知识就是这个原因......

<?php
$directory = './thumbnails/';

// create a handler to the directory
$dirhandler = opendir($directory);

// read all the files from directory
$nofiles=0;
while (false !== ($file = readdir($dirhandler))) {

// if $file isn't this directory or its parent 
//add to the $files array
        if ($file != '.' && $file != '..')
        { 
            $thumbs[$nofiles]= 'http://localhost:80/mapScripts/thumbnails/' . $file; 
            $nofiles++;               
        }   
}

//$i = rand(0, 3);


//$output = "{";
for($i=0; $i < 3; $i++){
$json[i] = json_encode($thumbs[$i]); 
$output = $output . $_GET['thumbnails' . $i]. "(".$json[i].")";
//$output = $output . "'thumb" . $i . "':'" . $thumbs[$i] . "',";
}

//$output = $output . "}";
//echo $_GET['thumbnails'] ."(".$json.")";

echo $output;

?>

然后在端口8080上的JavaScript(跨域,是的,它工作正常,直到我尝试使用此数组,而不是只传递一个图像URL)我想从PHP数组中获取每个图像URL,以便我可以制作使用图像的图标..

function makeThumbs(data, layer){
                var icon = new OpenLayers.Icon(data);
                layer.addMarker(new OpenLayers.Marker(new OpenLayers.LonLat(93.9, 29.53).transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913")),icon));
                for(var m = 0; m < layer.markers.length; m++){
                    layer.markers[m].events.register("click", layer.markers[m], function clickIcon(e){alert("How are you?");});
                    $("[id$=innerImage]").css({"border-style":"solid","border-width":"3px","border-color": "white"});
                }
            }

            $.getJSON('http://localhost:80/mapScripts/getThumbs.php?thumbnails2=?', function(data) {makeThumbs(data, markers);});

我传递给$ .getJSON方法的url也可能是错误的。我需要知道如何从传递的数组中选择确切的照片网址,而不是所有JSONP数据。

感谢您抽出时间和反馈来帮助我。

elshae

1 个答案:

答案 0 :(得分:0)

我实际上找到了一种做法。就这样......

<?php
$directory = './thumbnails/';

// create a handler to the directory
$dirhandler = opendir($directory);

// read all the files from directory
$nofiles=0;
while (false !== ($file = readdir($dirhandler))) {

// if $file isn't this directory or its parent 
//add to the $files array
        if ($file != '.' && $file != '..')
        { 
            $thumbs[$nofiles]= 'http://localhost:80/mapScripts/thumbnails/' . $file; 
            $nofiles++;               
        }   
}

//$i = rand(0, 3);


$output = $_GET['thumbnails'] . "({";
for($i=0; $i < 3; $i++){
//$json[i] = json_encode($thumbs[$i]); 
//$output = $output . $_GET['thumbnails' . $i]. "(".$json[i].")";
$output = $output . "'thumb" . $i . "':'" . $thumbs[$i] . "',";
}

$output = $output . "})";
//echo $_GET['thumbnails'] ."(".$json.")";

echo $output;

?>

输出: ({ 'thumb0': '的http://本地主机:80 / mapScripts /缩略图/ Tibet2.jpeg', 'thumb1': '的http://本地主机:80 / mapScripts /缩略图/ lhasa.jpeg', '的Thumb2': 'http:// localhost:80 / mapScripts / thumbnails / Tibet.jpg',})

然后在JavaScript中我只是:

function makeThumbs(data, layer){
                alert("already Here "+ data);
                var icon = new OpenLayers.Icon(data);
                alert(icon.url);
                layer.addMarker(new OpenLayers.Marker(new OpenLayers.LonLat(93.9, 29.53).transform(new OpenLayers.Projection("EPSG:4326"), new OpenLayers.Projection("EPSG:900913")),icon));
                for(var m = 0; m < layer.markers.length; m++){
                    layer.markers[m].events.register("click", layer.markers[m], function clickIcon(e){alert("How are you?");});
                    $("[id$=innerImage]").css({"border-style":"solid","border-width":"3px","border-color": "white"});
                }
            }

            $.getJSON('http://localhost:80/mapScripts/getThumbs.php?thumbnails=?', function(data) {makeThumbs(data.thumb2, markers);});

所以在$ _GET变量之后,您可以像往常一样放置典型的JSON数据并获取它(注意JavaScript中的data.thumb2)。