jqueryui 自动完成不是 working/working 取决于提供相同 JSONP 的域 - 为什么?
jqueryui autocomplete not working/working depending on the domain identical JSONP is served from - why?
代码如下,直接取自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 有什么不同?两者都用作 text/html mime 类型,我在显示的页面、数据、源或 headers.
中看不出任何区别
https://jqueryui.com/resources/demos/autocomplete/search.php,=确定
http://www.ggfxserve.co.uk/fresnius/fresnius_jsonp.php, = 不正常,尽管相同。
如果您想使用自动完成表单进行测试以查看(或不执行):-
http://www.ggfxserve.co.uk/fresnius/autocomplete.html = 工作
http://www.ggfxserve.co.uk/fresnius/autocomplete2.html = 不工作。键入 "com" 以启动它们尝试自动完成。
您不能在 php 中硬编码回调,除非您在请求中规定它是什么。
直接在浏览器中打开时,您在 php 中输出 jQuery1124009416418827878958_1479031851542()
,但该名称是在实际请求期间根据时间戳动态生成的
jsonp 输出的标准是使用 $_GET['callback']
,当您将数据类型设置为 [=31 时,jquery 会自动将查询参数添加到 url =]p.
在他们的演示中查看浏览器开发工具网络以查看用于确认的url。
所以你的非常基本的 php 代码看起来像
echo $_GET['callback'] . '(' . json_encode($output) .')';
我建议您改为实施 CORS,然后仅依赖 json 的服务。
使用 jsonp 的缺点是它是一个脚本请求而不是 XMLHttpRequest,并且它有错误处理限制
代码如下,直接取自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 有什么不同?两者都用作 text/html mime 类型,我在显示的页面、数据、源或 headers.
中看不出任何区别https://jqueryui.com/resources/demos/autocomplete/search.php,=确定 http://www.ggfxserve.co.uk/fresnius/fresnius_jsonp.php, = 不正常,尽管相同。
如果您想使用自动完成表单进行测试以查看(或不执行):-
http://www.ggfxserve.co.uk/fresnius/autocomplete.html = 工作 http://www.ggfxserve.co.uk/fresnius/autocomplete2.html = 不工作。键入 "com" 以启动它们尝试自动完成。
您不能在 php 中硬编码回调,除非您在请求中规定它是什么。
直接在浏览器中打开时,您在 php 中输出 jQuery1124009416418827878958_1479031851542()
,但该名称是在实际请求期间根据时间戳动态生成的
jsonp 输出的标准是使用 $_GET['callback']
,当您将数据类型设置为 [=31 时,jquery 会自动将查询参数添加到 url =]p.
在他们的演示中查看浏览器开发工具网络以查看用于确认的url。
所以你的非常基本的 php 代码看起来像
echo $_GET['callback'] . '(' . json_encode($output) .')';
我建议您改为实施 CORS,然后仅依赖 json 的服务。
使用 jsonp 的缺点是它是一个脚本请求而不是 XMLHttpRequest,并且它有错误处理限制