代码如下,直接取自jqueryui自动完成示例。唯一的变化是它从我自己的网站上拾取JSONP,除了在寻找响应时停留在小旋转器上之外,它什么也不做。
$( "#birds" ).autocomplete({
source: function( request, response ) {
$.ajax( {
url: "http://www.galaxygraphics.co.uk/fresnius_jsonp.php",
dataType: "jsonp",
data: {
term: request.term
},
success: function( data ) {
response( data );
}
} );
},
minLength: 3,
select: function( event, ui ) {
log( "Selected: " + ui.item.value + " aka " + ui.item.id );
}
} );
如果我将JSONP的源更改为
url:"https://jqueryui.com/resources/demos/autocomplete/search.php",
. .那就没问题了。问题是,jqueryUI示例中提供的JSONP与我自己页面中的JSONP有什么不同?两者都作为文本/html mime类型,我在显示的页面,数据,源或标题中都没有看到任何差异。
https://jqueryui.com/resources/demos/autocomplete/search.php, = OKhttp://www.ggfxserve.co.uk/fresnius/fresnius_jsonp.php, =不OK,即使相同
如果你想用自动完成表单来测试它的作用(或不):-
http://www.ggfxserve.co.uk/fresnius/autocomplete.html = workinghttp://www.ggfxserve.co.uk/fresnius/autocomplete2.html =不工作。输入"com"即可开始自动完成。
你不能在php中硬编码回调,除非你在请求中规定它是什么。
直接在浏览器中打开时,在php中输出jQuery1124009416418827878958_1479031851542()
,但该名称是在实际请求期间根据时间戳动态生成的
jsonp输出的规范是使用$_GET['callback']
,当你设置dataType为jsonp时,jquery会自动添加查询参数到url。
在他们的演示中,查看浏览器开发工具网络,查看用于确认的url。
基本php代码应该是这样的
echo $_GET['callback'] . '(' . json_encode($output) .')';
我建议你实现CORS,然后只依赖json被服务。
使用jsonp的缺点是它是一个脚本请求而不是XMLHttpRequest并且它有错误处理限制