我试图获得jsonp格式的数据,以便我可以使用phonegap。但在web浏览器上,它不起作用,并且在控制台中没有显示错误。很明显,代码一定有问题,但我从来没有做过jsonp如果有人能帮忙,请。PHP API
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);
}
}
)};
如果您在浏览器中检查错误日志,您将看到在请求该文件时出现语法错误。
响应无效JSONP。您可以将此添加到响应的末尾:
"{'"records'":2,'"airports'":[{'"a_id'":'"2'",'"airport'":'"Birmingham International'"},{'"a_id'":'"1'",'"airport'":'"Luton Airport'"}]}"
在您的PHP脚本中,代替这一行:
$jsonp_callback = isset($callback) ? $json: null;
放这行:
$jsonp_callback = isset($callback) ? $callback . '(' . $json . ')': null;