3

私は奇妙な問題に遭遇しています。

AJAX を使用してサーバーと通信しています。(私は Web アプリケーションを で実行していますlocalhost)。サーバーは、たとえば、http://www.example.com

Same Origin Policy をバイパスするために、JSONP を使用しています。<script>タグを動的に作成し、サーバーからデータを読み込みます。

ここまでは順調ですね。

次に、Web アプリケーションをこのサブドメインにアップロードすることにしました。http://m.example.com

それは私が狂ったエラーに遭遇したときです。ページが読み込まれる場合と読み込まれない場合があります。ロードされない場合、Firebug はDOCTYPEエラーをスローします。

私はいくつかの調査を行い、このスタックオーバーフローの投稿に出くわしました: firebug returns syntax error in doctype?

このリンクの回答を引用:

これは通常、HTML ドキュメントをスクリプトとして読み込んでいるために発生します。<script src=""></script>これは多くの場合(つまり、現在の HTML ドキュメントを指す相対 URI)、または 404 エラーを指すスクリプトの 1 つによって引き起こされます。

かなり役立つもの。これらすべてに基づいて、上記のすべてから、サーバーの応答が遅い場合は常に<script>タグのsrc属性が null であると結論付けました。がスローされるため404 errorDOCTYPEFirebug でエラーが発生します。サーバーが迅速に応答するときはいつでも、問題はなく、すべて正常に動作しています。

この問題を解決するにはどうすればよいですか? 手動でタイムアウトなどを設定することもできますが、それは絶対確実でエレガントなソリューションではありません。

助けてくれる人はいますか?

編集:

ここにいくつかのコードがあります:

この関数は、scriptタグを動的に作成するために使用されます。

function appendScriptToHead() {
    var element = document.createElement("script");  
    element.src = 'http://www.example.com/?data&callback=callfunction'; 
    document.getElementsByTagName("head")[0].appendChild(element) 
}

このコールバック関数は、JSONP データを含む上記の URL が読み込まれたときに呼び出されます。

function callfunction(response) {  
    alert(response);  
}
4

1 に答える 1

1

ここに少し誤解があると思います。要素scriptには常にsrcプロパティ セットがありますが、その内容はサーバーの応答によって異なります。エラー 404 になるとは思えませんが (要素が見つからないことを示しているため、ほとんど繰り返されません)、500 種類のエラーになる可能性があります。

ロードするスクリプトを選択するロジックの何が問題なのかを確認するために、クエリをそのままデバッグすることをお勧めします (つまり、http://www.example.com/?data&callback=%callfunction%ブラウザまたはスクリプト化された HTTP UserAgent で開きます)。

于 2012-07-12T11:47:42.240 に答える