0

わかりました、基本的に私がやろうとしているのは、クライアントのサイトの下部にキャッチフレーズを含めることができるように、javascript のクロスドメイン/同一オリジンの制限をバイパスすることです (それは私たちのサーバーでホストされており、代わりに 1 か所で更新できます)。 100 万のサイトを更新すること)。JSONPを使用してjqでこれを行いたいと思います。キャッチフレーズを表示するページに入る私のコードは次のとおりです。

<div id="tagline"></div>
<script type="text/javascript">
 $(document).ready(function() {
  var url =  "http://www.mydomain2.com/api/tagline.php";
   $.getJSON(url + "?callback=taglineDisp", null, function(taglineDisp) {
    for(i in taglineDisp) {
     payload = taglineDisp[i];
     $("#tagline").append(payload.text);
    }
   });
 });
</script>

tagline.php の内容は次のとおりです。

<?php header('Access-Control-Allow-Origin: *'); ?>
<?PHP echo "taglineDisp({\"tagline\" : \"Powered by <strong><a href='http://www.mydomain2.com'>Company Name</a></strong>\"}); ";

もともと tagline.php は動的ではなく、tagline.json にこれを入れただけです。

taglineDisp({"tagline" : "Powered by <strong><a href='http://www.mydomain2.com'>Company Name</a></strong>"});

そうですよね?JSONP には taglineDisp(); が必要です。JSON オブジェクトをラップしますよね?

最初は典型的な起点制限エラーが発生していましたが、.php に変更して "Access-Control-Allow-Origin: *" ヘッダー ディレクティブを追加すると、次のようになりました。

Given URL is not allowed by the Application configuration.: One or more of the given URLs is not allowed by the App's settings.  It must match the Website URL or Canvas URL, or the domain must be a subdomain of one of the App's domains. oauth:1

私の説明とコード サンプルが問題ないことを願っています。私は膨大な数の JSON 記事を読みました (SO と他のサイトの両方で -- IBM は実際には JSON に関する優れたリソースもいくつか持っています) が、どこが間違っているのかまだわかりません。私は主に jq noob です。:\

このすべての作業はそれだけの価値がありますか? iframe は私の頭痛の種を救ってくれますか? jq は、追加のリソース オーバーヘッドを犠牲にして、ブラウザー間の互換性を確保するのに適しているのではないかと考えました。:|

4

1 に答える 1

1

$.getJSON を使用しているため、 を呼び出すコールバックを設定できますtaglineDisp(json)。しかし、JSONP を使用したい場合、Javascript メソッドは少し異なります!JSONP を動的にロードしたい場合は、次のようにする必要があります。

function load_script(url) {
  var s = document.createElement('script'); 
  s.src = url;
  document.body.appendChild(s);
}

function load_scripts() {
  load_script('http://www.mydomain2.com/api/tagline.js');
}

window.onload=load_scripts;

複雑な JSONP を偽造したい場合は、以下も使用できます: Simple JSON for PHP

include('includes/json.php');

$Json = new json('callback', 'taglineDisp'); 

$Json->add('status', 200);
$Json->add('message', success);
$Json->add('tagline', "Powered by <strong><a href='http://www.mydomain2.com'>Company Name</a></strong>");

$Json->send();

アップデート :

コールバックなしでJSONを送信するだけで、getJSON経由でJSONPを使用できます

$.getJSON(
    'http://www.mydomain2.com/api/tagline.js',
    {'callback': 'process'}
);
于 2015-04-27T06:45:19.850 に答える