用jquery通过jsonp循环

时间:2014-06-06 16:53:11

标签: javascript php jquery ajax jsonp

我可以看到firebug中的响应是正确的,但实际上无法访问它返回的数据 - 需要一个指针。我当然试图将一个条目的时间戳放入div中 - div确实存在。

jquery的

$(document).ready(function(){
        $.ajax({
            url: 'http://www.testurl/api.php',
            data: {check: 'one'},
            dataType: 'jsonp',
            jsonp: 'callback',
            jsonpCallback: 'jsonpCallback',
            success: function(){
                alert("success");
            }
        });
    });

function jsonpCallback(data){
    $('#jsonpResult').text(data.timestamp);
}

PHP

<?php
header("content-type: text/javascript");
require_once('Connections/con.php');
mysql_select_db($database_ey, $ey);
$query_pledges = "SELECT * FROM pledges ORDER BY timestamp DESC LIMIT 10";
$pledges = mysql_query($query_pledges, $ey) or die(mysql_error());
$totalRows_pledges = mysql_num_rows($pledges);

if (isset($_GET['check'])) {
    $responses = array();
    while ($row_pledges = mysql_fetch_assoc($pledges)) {
        $response    = array(
            'FirstName' => $row_pledges['FirstName'],
            'Surname' => $row_pledges['Surname'],
            'Country' => $row_pledges['Country'],
            'pledge1' => $row_pledges['pledge1'],
            'pledge2' => $row_pledges['pledge2'],
            'pledge3' => $row_pledges['pledge3'],
            'timestamp' => $row_pledges['timestamp']
        );
        $responses[] = $response;
    }
    echo $_GET['callback'] . '(' . json_encode($responses) . ');';
}
?>

我在萤火虫中的回答看起来像

jsonpCallback([{"FirstName":"me","Surname":"lastname","Country":"United Kingdom","pledge1":"pledgeIcon1","pledge2":"pledgeIcon2","pledge3":"pledgeIcon4","timestamp":"1402066487"}]);   

如上所述,我希望能够在jquery中循环结果并附加到各种div

2 个答案:

答案 0 :(得分:0)

我需要的循环看起来像这样

function jsonpCallback(data) {
    $.each(data, function (i, item) {
        $('#jsonpResult').append(
            $('<div/>')
            .addClass("myclass")
            .text(item.timestamp) //item.timestamp
        );
    });
}

答案 1 :(得分:0)

因为你的jsonpresponse是一个数组,你试图像一个对象一样使用它。

function jsonpCallback(data){
    $('#jsonpResult').text(data.timestamp); // Add the [0] and look what happens.
}

使用响应的正确方法是:

function jsonpCallback(data){
    $('#jsonpResult').text(data[0].timestamp);
}

所以,如果你需要迭代将是这样的

使用每个:

function jsconpCallback(data){
    data.each(function(item){
        $('#jsonpResult').append(item.timestamp+"<br />");
    });

}

或标准:

   function jsonpCallback(data){
       for(var i = 0 ; i < data.length ; i++){
            $('#jsonpResult').append(item.timestamp+"<br />");
       }
   }

我正在使用append,因为我们期待多个数据(一个数组)。

如果您只需要一个大对象,请删除发送de jsonP响应的PHP文件中的de []。

希望它有所帮助。