0

http://loopj.com/jquery-tokeninput/を使用してトークンを追加するChrome拡張機能を作成しています。前の質問を参照してください。

tokenInputで処理するためにサーバーから結果を取得する方法について混乱しています。次の記事、JSONPとは何ですか?、クロスドメインjsonpを機能させるには、コールバッククエリパラメータを追加する必要があることを示しています。

$(function() {
  $("#token").tokenInput("http://localhost/token/search?callback=jsonprocess", {
    preventDuplicates: true,
    crossDomain: true,
  });
});

これは、私のphpコードで応答をラップするために使用されます。

header('Content-type: text/javascript');
echo $this->request->query('callback') . '(' . json_encode($token_array) . ')';
exit;

次にjsonprocess()、JavaScriptのメソッドを呼び出します。ただし、これはtokenInputインスタンスのコンテキスト外であるため、結果を入力できません。これは正しい機能ですか?または、jQueryトークン入力プラグインにjsonpを直接処理させる方法はありますか?

tokeninputの成功コールバック:

ajax_params.success = function(results) {
    cache.add(cache_key, $(input).data("settings").jsonContainer ? results[$(input).data("settings").jsonContainer] : results);
    if($.isFunction($(input).data("settings").onResult)) {
        results = $(input).data("settings").onResult.call(hidden_input, results);
    }
};

...呼び出されることはありません。

4

3 に答える 3

0

思ったより簡単。?callback=jsonprocess検索URLには必要ありません

$(function() {
  $("#token").tokenInput("http://localhost/token/search", {
    preventDuplicates: true,
    crossDomain: true,
  });
});
于 2012-11-28T14:17:15.833 に答える
0

jQuery Tokeninputのドキュメントでわかるように、jsonpリクエストにする場合は、オプションのcrossDomainように設定する必要があります。true

$(function() {
  $("#token").tokenInput("http://localhost/token/search?callback=jsonprocess", {
    preventDuplicates: true,
    crossDomain: true
  });
});

正しいJSONコンテンツタイプはですapplication/json

header('Content-type: application/json');

アップデート:

jsonpで機能しない場合は、CORSを有効にして試してみてください。

ここであなたは何をしますか

$(function() {
  $("#token").tokenInput("http://localhost/token/search?callback=jsonprocess", {
    preventDuplicates: true,
    crossDomain: false, //it's also false as default.
  });
});

PHPでは、CORSを有効にする必要があり、結果をコールバック関数に取り込む必要はありません。JSONのみをダンプします。

header("Access-Control-Allow-Origin: *");
header('Content-type: text/javascript');
echo json_encode($token_array);
exit;
于 2012-11-28T01:12:30.867 に答える
0

このようにjavascriptとphpでコールバックが必要だと思います:

javascript:

script.php?callback=?&your_parametars_here

とphpで

echo $_GET['callback'].$your_data_here
于 2012-11-28T14:51:11.157 に答える