【问题标题】:Convert data into JSONP from json not working将数据从 json 转换为 JSONP 不起作用
【发布时间】:2014-04-11 21:43:12
【问题描述】:

我正在尝试获取 jsonp 格式的数据,以便可以使用 phonegap。但是在网络浏览器上它不起作用,并且控制台中没有显示错误。显然,代码一定有问题,但是因为我以前从未做过 jsonp 如果有人可以帮忙的话。 php接口

function airportlist_get() {

    $this->load->database();
    $sql = 'SELECT * FROM airport order by airport;';
    $sql2 = 'SELECT COUNT(a_id) AS records FROM airport';
    $query2 = $this->db->query($sql2);
    $data2 = $query2->row();
    $info->records = intval($data2->records);
    $query = $this->db->query($sql);
    $data = $query->result();
    $info->airports = $data;
$callback = isset($_GET['callback']) ? preg_replace('/[^a-z0-9$_]/si', '',        $_GET['callback']) : false;
    header('Content-Type: ' . ($callback ? 'application/javascript' : 'application/json') . ';charset=UTF-8');
$json = json_encode($info);
$jsonp_callback = isset($callback) ? $json: null;
    $this->response($jsonp_callback, 200);
}

Ajax 调用:

function Getairports(){
$.ajax({
        url: 'http://creative.coventry.ac.uk/~airports/airports/v1.0/index.php/airport/airportlist',
        dataType: 'jsonp',
        success: function(data) {
     $("#airportlist").empty();
        $.each(data.airports,function(i,airport){
    $('#airportlist').append('<li> <a href="#shopbyairport" data-transition="slide" onclick="Getshops('+airport.a_id+')">'+airport.airport+'</a></li>');
a_id = airport.a_id;
console.log(a_id);
});

 $.mobile.changePage("#airports"); 

 $('#airportlist').listview('refresh');
 },

 error: function (response) {
        var r = jQuery.parseJSONP(response.responseText);
        alert("Message: " +r.error.text);

    }
    }
          )};

【问题讨论】:

    标签: php jquery ajax json jsonp


    【解决方案1】:

    如果您在浏览器中查看错误日志,您会看到在请求文件时出现语法错误。

    响应不是有效的 JSONP。您在回复的末尾添加了这个:

    "{\"records\":2,\"airports\":[{\"a_id\":\"2\",\"airport\":\"Birmingham International\"},{\"a_id\":\"1\",\"airport\":\"Luton Airport\"}]}"
    

    【讨论】:

    • 那我该如何改变
    • 我已经改变了,但那是因为我在发布文件后正在编辑,结果与响应一起回显
    • @user3368909:现在响应只包含那个字符串,根本没有 JSONP。
    • 好的,我会离开 echo $callback 。 '('.$json.')';并删除 $this->response($jsonp_callback, 200);
    • @user3368909:这样更好,但是您错过了 JSONP 响应中的函数名称。
    【解决方案2】:

    在您的 PHP 脚本中,而不是这一行:

    $jsonp_callback = isset($callback) ? $json: null;
    

    输入这一行:

    $jsonp_callback = isset($callback) ? $callback . '(' . $json . ')': null;
    

    它应该在之后工作。

    【讨论】:

      猜你喜欢
      • 2017-05-08
      • 2019-08-20
      • 1970-01-01
      • 2012-08-24
      • 1970-01-01
      • 2012-12-25
      • 2014-11-23
      • 1970-01-01
      • 2022-01-07
      相关资源
      最近更新 更多