2016-11-13 18 views
0

jqueryuiのオートコンプリートの例から直接取ったコードです。唯一の変更点は、自分のサイトからJSONPを取得していることです。ただし、レスポンスを探している間は小さなスピナーに留まる以外は何もしません。jqueryui autocompleteは動作していません/同一のドメインに応じて動作します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); 
    } 
}); 

私は

URLにJSONPのソースを変更する場合:それはすべてOK働いて..then "https://jqueryui.com/resources/demos/autocomplete/search.php"、

。ですから、問題は、jqueryUIのサンプルと自分のページのJSONPで提供されるJSONPの違いは何ですか?どちらもtext/html mimeタイプとして提供されており、表示されているページ、データ、ソースまたはヘッダのいずれにも違いは見られません。

https://jqueryui.com/resources/demos/autocomplete/search.php = OK http://www.ggfxserve.co.uk/fresnius/fresnius_jsonp.php =同一ではあるが、OKではありません。

アクション(またはしない)でそれを見るためにオートコンプリートフォームをテストする場合: -

http://www.ggfxserve.co.uk/fresnius/autocomplete.html =作業 http://www.ggfxserve.co.uk/fresnius/autocomplete2.htmlは=動作していません。どちらかに「com」と入力すると、自動完成を試みてそれらを開始できます。

答えて

1

要求に何が含まれているかを明記しない限り、PHPでコールバックをハードコーディングすることはできません。ブラウザで直接開くが、その名前を動的にJSONP出力のための規範が$_GET['callback']とjQueryを使用することであろう実際の要求

時のタイムスタンプに基づいて生成されたときは、PHPでjQuery1124009416418827878958_1479031851542()を出力している

はにクエリのparamを追加しますjsonpとしてdataTypeを設定すると、自動的にURLが取得されます。

デモでは、ブラウザの開発ツールのネットワークで確認するために使用されるURLを参照してください。

だからあなたの非常に基本的なPHPコードは、私があなたの代わりにCORSを実装して、提供されてJSONにのみ依存していることをお勧め

echo $_GET['callback'] . '(' . json_encode($output) .')'; 

ようになります。

JSONPを使用しての欠点は、スクリプトの要求ではないのXMLHttpRequestであり、それはそれを解決している、

+0

おかげエラー処理の制限があります。私がやったことから推測できるように、私はよく分からない分野に迷い込んでいます。あなたの返答は私に時間を節約しました。 – galaxyg

関連する問題