【问题标题】:Looping through jsonp with jquery [duplicate]用jquery循环jsonp [重复]
【发布时间】: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 无效!
  • 这给了我完整的回应,让我放心了数据在那里。我如何单独打破它
  • 仍然无法从那里找到我要找的东西

标签: javascript php jquery ajax jsonp


【解决方案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 []。

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 2013-08-16
      • 2012-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-21
      • 2017-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多