JSONP
を使用して外部ページを読み込もうとしていますが、ページはHTML
ページであるため、ajaxを使用してコンテンツを取得したいと思います。
編集:私がこれをしている理由は、サーバーではなくページをロードするときに、ヘッダー、IP、エージェントなどのすべてのユーザー情報を渡したいからです。
これは実行可能ですか?現在、ページを取得できますが、jsonpはjsonを解析しようとし、エラーを返します:Uncaught SyntaxError: Unexpected token <
サンプルコード:
$.post('http://example.com',function(data){
$('.results').html(data);
},'jsonp');
私は人々がテストするためにjsfiddleをセットアップしました: http://jsfiddle.net/8A63A/1/
http://en.wikipedia.org/wiki/JSONP#Script_element_injection
JSONP呼び出しを行う(つまり、この使用パターンを使用する)には、スクリプト要素が必要です。したがって、新しいJSONPリクエストごとに、ブラウザは新しい要素をHTML DOMに追加(または再利用)する必要があります。つまり、「src」属性に必要な値を指定してHTMLDOMに挿入する必要があります。次に、この要素が評価され、src URLが取得され、応答JSONが評価されます。
今あなたのエラーを見てください:
キャッチされないSyntaxError:予期しないトークン<
<
は任意のhtmlタグの最初の文字であり、おそらくこれは<DOCTYPE
の始まりです。この場合、これはもちろん、無効なJavaScriptです。 。
そして[〜#〜] no [〜#〜]、HTMLデータのフェッチにJSONPを使用することはできません。
私はあなたが望むことをしましたが、私の場合、HTMLを返すサーバー側のコードを制御できます。それで、私がしたことは、返されたオブジェクトのJsonプロパティの1つにHTMLコードをラップし、クライアント側で次のように使用しました。
callback({"page": "<html>...</html>"})
直面している構文エラーは、使用しているライブラリがjsonを予期しているが、応答がHTMLであるためです。
私はあなたのために3つの言葉を持っています: 同一生成元ポリシー
リモートURLが実際に適切なJSONPリクエストをサポートしていない限り、あなたはあなたがしようとしていることをすることができません。そして、それは良いことです。
編集:もちろん、サーバーを介してリクエストをプロキシすることもできます…
クライアントを使用してHTMLファイルを取得したいだけの場合は、flyJSONPを使用することをお勧めします。これはYQLを使用します。または、いくつかの優れた手法を使用するjankyPOSTを使用します。
jankyPOSTは、非表示のiframeを作成し、フォーム(iframe [0] .contentWindow.document.body.form.name)を詰め込みます。
次に、HTML5(レガシーブラウザをご覧ください!)webMessaging APIを使用して他のiframeに投稿し、iframeのフォーム要素の値をuが指定した値に設定します。
フォームをリモートサーバーに送信します...完了しました。
または、PHP curl、解析、エコーなどを使用することもできます。
IDKは、正確に何に使用するのかというと、これがお役に立てば幸いです。
また...サーバーコードからの出力であるものなら何でもJSONPできると確信しています。私はClientLoginでkeyGenページをJSONPするだけでこれを行い、b/wタグであったとしても、テキストを正常にconsoleLoggedしました。他にもいくつかエラーがありましたが、ポイントはその出力をスクレイピングしたことです。
現在、私はあなたがしていることをやろうとしているので、成功したら投稿します。
これは不可能だと思います。 JSONPでは、応答が適切にレンダリングされる必要があります。
別の解決策が必要な場合は、iframeにURLを読み込んで、iframeを介して通信しようとするとどうでしょうか。私はそれがうまくいくと100%肯定的ではありませんが、一見の価値があります。