jqueryui自动完成不工作/工作取决于相同的JSONP服务的领域-为什么



代码如下,直接取自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并且它有错误处理限制