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


PHP and Ajax using foreach loop in the callback and return array

我正试图从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。

它只返回1个URL,因为它只返回第一个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);
        });
    }
});

如果你尝试这样的东西怎么办:

$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);
    }
});