用jquery循环jsonp [重复]

Posted

技术标签:

【中文标题】用jquery循环jsonp [重复]【英文标题】:Looping through jsonp with jquery [duplicate] 【发布时间】:2014-07-28 00:43:15 【问题描述】:

我可以在 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

【问题讨论】:

你不能在jsonpCallback()这样做吗? 我似乎无法访问它 - 任何示例都值得赞赏 那么你在函数中使用$('#jsonpResult').text( JSON.stringify(data) );而不是你当前的代码会得到什么?如果data 是数组,则data.timestamp 无效! 这给了我完整的回应,让我放心了数据在那里。我如何单独打破它 仍然无法从那里找到我要找的东西 【参考方案1】:

我需要的循环是这样的

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

【讨论】:

【参考方案2】:

这是因为您的 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 []。

希望对你有帮助。

【讨论】:

以上是关于用jquery循环jsonp [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Jquery ajax响应说“意外的令牌':'”(使用jsonp作为数据类型)[重复]

每个jQuery在数组上循环几次[重复]

Jquery循环重复创建相同的对象

使用 jQuery 解决循环中的承诺 [重复]

jQuery-UI 对话框仅显示 for 循环的最后一次迭代 [重复]

javascript函数中的一个函数来重复js jquery jq循环