我正在尝试以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);
}
}
)};
答案 0 :(得分:0)
如果您在浏览器中检查错误日志,则会在请求文件时看到语法错误。
响应无效JSONP。你在回复结束时添加了这个:
"{\"records\":2,\"airports\":[{\"a_id\":\"2\",\"airport\":\"Birmingham International\"},{\"a_id\":\"1\",\"airport\":\"Luton Airport\"}]}"
答案 1 :(得分:0)
在PHP脚本中,而不是这一行:
$jsonp_callback = isset($callback) ? $json: null;
把这一行:
$jsonp_callback = isset($callback) ? $callback . '(' . $json . ')': null;
之后应该可以使用。