PHP和Ajax在回调和返回数组中使用foreach循环

时间:2015-02-20 15:33:54

标签: javascript php jquery arrays ajax

我试图从 PHP 结果中循环回调

但我无法或者我不知道如何将数组作为回调

返回

这是我的 PHP 代码:

$id = $_GET['id'];

$data = file_get_contents('__url');

parse_str($data);

$array = explode(',', $url_encoded_fmt_stream_map);

foreach($array as $item) {
    parse_str($item);
    echo $_GET['callback']."(".json_encode($url).");"; // it should return an array at least 3 urls
}

这是我的 Jquery 代码:

$.ajax({
    url:"file.php",
    dataType: 'jsonp',
    data: {id: id},
    success:function(response){
        $('body').append(response);
    }
});

它只给我一个结果,但它应该返回一个数组,它的工作方式就像我没有在php代码中使用foreach循环一样。

我在没有 Ajax请求的情况下测试了 PHP 代码,它返回了一个url数组,但如果我使用了ajax回调,它只返回一个url。

2 个答案:

答案 0 :(得分:5)

它只返回1个URL,因为它只返回第一个。 您应该encode整个数组并在success函数中循环,如下所示:

PHP:

$id = $_GET['id'];
$data = file_get_contents('__url');
parse_str($data);
$array = explode(',', $url_encoded_fmt_stream_map);
echo json_encode($array);

JS:

$.ajax({
    url:"file.php",
    dataType: 'jsonp',
    data: {id: id},
    success:function(response){
        var res = JSON.parse(res);
        $.each(res, function(key, index){
           $('body').append(index);
        });
    }
});

答案 1 :(得分:2)

如果你尝试这样的话怎么办?

$id = $_GET['id'];

$data = file_get_contents('__url');

parse_str($data);

$array = explode(',', $url_encoded_fmt_stream_map);

$final_arr = array();
foreach($array as $item) {
    parse_str($item);
    array_push($final_arr , $url);
}

$jsonp = json_encode($final_arr);

if(isset($_GET['callback'])){
    header("Content-Type: application/json");
    echo $_GET['callback'] . '(' . $jsonp . ')';
}else{
    echo $jsonp;
}

和你的ajax:

$.ajax({
    url:"file.php",
    dataType: 'jsonp',
    data: {id: id},
    success:function(response){
        var obj = JSON.parse(response);
        $.each(obj, function(key,val){
             console.log(key);
             console.log(val); //depending on your data, you might call val.url or whatever you may have
        });
        $('body').append(response);
    }
});