0

ユーザーの詳細を必要とするブックマークレットを作成しています。

クロスドメイン通信の最良のオプションはjQuery.getJSON、ドキュメントにフォームと iframe を追加し、フォーム ターゲットを iframe に設定することであると理解しました。

getJSON から始めることにしましたが、それほど面倒ではないように思えますが、問題があるようです。

json呼び出しに使用するものは次のとおりです。

$.getJSON('http://mydomain.com/bookmarklet_getjson_functions.php', function(data) {
        alert(data);
});

ここにphpページがあります:

echo "{";
echo "item1: ", json_encode($item1), "\n";
echo "item2: ", json_encode($item2), "\n";
echo "item3: ", json_encode($item3), "\n";
echo "}"

Firebug が開いているときにブックマークレットのリンクをクリックすると、次のようになります。

GET http://mydomain.com/bookmarklet_getjson_functions.php 200 OK 116ms

しかし、アラートは発生しません。

どんな手掛かり ?

4

2 に答える 2

2

わかりました-他のいくつかの例をテストした後、私が間違っていたことを発見しました-問題は、jqueryが生成するコールバックを返さなかったことです-それは一種の「パスワード」として使用されています

したがって、解決策は基本的に次のとおりです。

$.getJSON('http://mydomain.com/bookmarklet_getjson_functions.php?jsoncallback=?', function(data) {
    alert(data);
});

getの最後?は、?jsoncallback=?後で「パスワード」として使用されるランダムな関数名に自動的に置き換えられます

だから今、私のPHPファイルでは、最初にコールバック関数をエコーし​​、次に()括弧内に変数をjson形式でエコーします:

$toecho = array(
"firstname" => "someone",
"lastname" => "somoene's lastname"

);
//return in JSON format
echo $_GET['jsoncallback'].'('.json_encode($toecho).')';

これは次のように表示されます:

jquery_37328327837823232_3236363({"firstname":"somsomeonee","lastname":"omoene's lastname"})

それが誰かを助けることを願っています。

于 2012-12-26T21:00:34.453 に答える
1

その「phpページ」は少し奇妙です。これを試すことができます:

header('Content-Type: text/javascript');
echo json_encode(array(
    'item1' => $item1,
    'item2' => $item2,
    'item3' => $item3,
));
exit;

応答のコンテンツ タイプを設定し、送信するデータを適切にエンコードする必要があります。(...console.log()代わりに、応答をテストすることをお勧めしますalert():)

于 2012-12-26T20:57:56.303 に答える