jquery jsonp の原理は、script
タグの src
属性を使用して、フロントエンドとバックエンドのデータ要求で発生するクロスドメインの問題を解決することです。私が理解していないのは、jquery が動的に script
タグをドキュメントの先頭である head
タグに追加するということです。通常、コールバック関数は にあります。 body
、関数は最初に宣言されてから、宣言なしで使用されます。なぜ直接呼び出してもバックグラウンドから渡されるデータを取得できるのでしょうか。
以下は私が行ったテストです:
リーリーこのコード文字列が宣言された test
関数の下に配置されると、数字 10 が出力されます。test
関数の上に配置されると、エラーが報告されます
jquery の実装を比較すると、動的に生成された js が宣言された関数の前に呼び出された場合に実行される理由がよくわかりません。
リーリー
直接リンクされた src の場合、ブラウザはそれを上から下に解析し、最初に b.js の値を取得します。a.js の関数はまだページに読み込まれておらず、テストはありません。 ) この関数なので、エラーが報告されます
ただし、ajax リクエストを送信する場合は、ページが完了するのを待ってからリクエストすることになります。つまり、最初にコールバック関数を宣言してから、リクエストするスクリプトを作成するため、この時点でのスクリプトの場所は影響を受けません。最終結果。 。
実行順序に関しては、非同期の問題を無視しているため、サーバーから返されたスクリプト タグが読み込まれるときに、対応するメソッドを呼び出すことができるように、ローカル コールバック関数が定義されている必要があります。
簡単に言えば:
jsonp=ローカル コールバック関数を定義=>スクリプト タグをロード=>ロードされたスクリプト タグのコンテンツを実行します。
jsonp 率直に言うと、これは合意です:
「私たちは遠すぎてお互いに連絡が取れないのですが、どうすれば私にあなたのものをくれるでしょうか?」
「私がそれをあなたに投げてはどうでしょうか、あなたはそれを捕まえることができますか?」 ?'
'わかりました、私はバスケット (コールバック) を持っています。それはあなたの 1 時の位置 (コールバック名) にあります。バスケットが存在するかどうか、そして正しい位置にあるかどうかについては、それをそこに投げます。契約には影響しません。
jsonpで導入されるjsの読み込み場所は、jsを取得するjsonpステートメントが実行される場所です。配置に関しては、あくまで形式的なものです。