2016-08-23 9 views
0

したがって、jsonp呼び出しに対してjavapriptライブラリ(クエリパラメータに基づいて変更する)を返すような種類のWebサービスを作成するように求められました。 私はそうするためにいくつかのスクリプトを書こうとしましたが、それは可能で簡単です。 質問は、私はjsonpに関する多くの記事を読んでいますが、なぜこのようなことをしてはいけないのですか?そして、私は同じ結果を達成するために何ができますか?この方法ではありませんか?ここコールバックなしでjsonp呼び出しに匿名関数を返します

クライアントサンプル:

var script = document.createElement('script'); 
script.src = '//my_url/testjsonp.php'; 

document.getElementsByTagName('head')[0].appendChild(script); 

ここでは、サーバーのサンプル:

echo 'var a = function(){ /* basically what i want here */ }()'; 

答えて

1

ことの問題のカップル:

  1. あなたはグローバルa変数を作成しています。あなたのサービスを呼び出すページはそれを担当する必要があります。aを設定できない限り、それは問題です。

  2. あなたの関数内のコードは、それがデータで何をすべきかを魔法のように知っていなければなりません。これはJSONPのポイントに反しています.JSONPは、サーバーがデータを返すだけで、クライアントがそのデータで何をするかを決めることができます。標準JSONPリクエストは、発信者がコールバック名を指定することができます(通常はcallbackパラメータではなく、名前は異なります)なぜこれら二つの理由がある

 
http://example.com/path/to/service?callback=foo 

...と標準JSONP応答は次のようになります。

foo({/*...JSON here...*/}); 

このように、呼び出し元は、渡すデータの処理方法を知っている関数を定義します。

+0

これはもちろん、クエリのparamで設定可能な変数です。他の部分については、私の場合はサーバが魔法のようにデータと何をするべきかを知ることができます。 、非常に有益! –

+0

@ gamera_the_beast:#2は基本的に密結合を避けるための問題です。おそらくあなたの特定の状況では、サーバーは何をするべきかを知っていますが、そのエンドポイントはページ固有です。一方、サーバーがデータを返すだけで、ページの構造についての前提がなくても、要素IDとクラスが更新されたり、移動されたりするなど、ページは独立して開発され、維持されます。新しい/別のデータが必要なページがあれば変更が可能です。 –

+0

良い点ですが、私のケースは非常に奇妙なので、エンドポイントは単一のページと結合されていませんが、エンドポイントを必要とするすべてのページ(現在は少なくとも)は理解しています。 +1 –

関連する問題