2012-05-08 10 views
2

私はそれについて多くのことを読んでテストしていましたが、作成したRESTサービスを使用してJQuery AutocompleteのJSONPを使用することができませんでした。JSONPとJQUERYオートコンプリート

は、ここに私のjavascriptです:

$("#input").autocomplete({ 
     source: function(request, response) { 
      $.ajax({ 
       url: "http://localhost:8080/Rest/api/suggest/", 
       dataType: "jsonp", 
       data: { 
        jsonpCallback : "p", 
        q: request.term 
       }, 
       success: function(data) { 

        response($.map(data.suggestions, function(item) { 
         return { 
          label: item.LABEL, 
          value: item.URI 
         } 
        })); 
       } 
      }); 
     }, 
     minLength: 2 
}); 

とJSONPのオブジェクトは、REST APIにjsonpCallback = Pを介して与えられる

p({}); 

コールバック関数に包まれた標準のJSONオブジェクトでしょうか?。 javascript/htmlコードは、http://localhost:8888サーバーの下でローカルに実行されます。

は、データ応答を表示するには、私は何も動作、私はそれを取る場合は、私のjavascriptの「P」コールバック関数

function p(data){ 
     alert(data.toSource()); 
    } 

に定義する必要がありますが、私は理解していないことは、なぜJQuery Autocompleteサンプルコードの作品ですコールバック関数がなく、とりわけドロップダウン結果のオ​​ートコンプリートが表示されない理由は何ですか?オートコンプリート機能のドロップダウンを行うために、コールバック関数を使って何をすべきですか?

は=私はjQueryの自動jsonCallbackを追加しますと信じて、 ダニエレ

+0

私はそれを実行しない方法:ここでは2例、PerlやPHPは? – Daniele

答えて

1

をあなたのすべてをありがとう!データ型が 'jsonp'の場合コールバック関数名として乱数を使用しますが、この場合はsuccess:関数がコールバックとして機能します。あなたの関数p()は今まで呼ばれていますか?それも引用するべきではありません。これは関数参照であり、文字列ではありません。

data: { 
    jsonCallback : "p" 

しかし、これはあなたのRESTサービスは少し賢くなるとjsonCallbackのCGIパラメータを取得し、JSONの関数ラッパーとしてその値を使用する必要がありますを意味します:

私はこれをオフのままにしたいです。

UPDATE再

@Daniele: "私はランダムな名前を知っていますかどのようにjqueryのは、コールバック関数に代入します?"

これは、あなたのRESTサービスに使用しているプログラミング言語によって異なります。

#!/usr/bin/perl 
use CGI ":cgi"; 
$jsonCallback = $q->param('jsonCallback'); 
$json = ... 
print header(
    -type => 'application/json' 
); 

print $jsonCallback . '(' if $jsonCallback; 
print $json; 
print ')' if $jsonCallback 

PHP

<?php 
    $jsonCallback = $_GET['jsonCallback']; 
    $json = ... 
    echo $jsonCallback . '('; 
    echo $json; 
    echo ')'; 
    ?> 
+0

答えてくれてありがとう、jsonCallbackは実際には私のAPIパラメータです。まだ動作しません! – Daniele

+0

私が推奨しているのは、jQueryにjsonCallbackパラメータの値を設定させ、サービスではなく、その名前を使用することです。 –

+0

ああ、ありがとう。最後に、Jqueryがコールバック関数に割り当てるランダムな名前をどのように知っていますか? – Daniele

関連する問題