2012-02-11 2 views
5

短い質問:サーバーへのjsonpリクエストを作成し、リクエストをキャプチャしますが、javascriptとして解析しない方法はありますか? jQuery 1.5でdataType: "jsonp text"を使用していますが、動作しません。jsonpとしてリクエストを送信し、レスポンスをテキストとして解釈する、jQueryを使用する1.5

私はjsonpでAJAX経由でクロスドメインURLにアクセスしようとしています。問題は、他のドメイン(私の大学のディレクトリリスト)が非常に古く、サーバがjsonpをサポートしているかどうか疑問です。

  • Firefoxでは、「XMLタグ名の不一致(METAが予想される)」というエラーが表示されます。クロムで、私は "Uncaught SyntaxError Unexpected token <"を取得し、両方とも私のAJAX要求に対応するファイルを指しています。エラーコールバックからのエラー文字列は "parsererror"です。
  • 私は通常のAJAX呼び出しを行うことができません - データ型を単に "text"に変更するか、それをまとめて削除すると、他のドメインはユーザーが認証されず、ログインページにリダイレクトするすでにブラウザ側にログインしています。 dataTypeがjsonpの場合、これは起こりません。
  • 私はサーバーがJSONPをサポートする必要があると知っていますが、そうは思いませんが、dataTypeをJSONPに変更すると、ChromeとFirefoxの両方で応答ページのリソースが表示されます。ブラウザへの応答(静的なHTML Webページ+いくつかのJavaスクリプト) - 取得したいデータが含まれています。
  • 問題は、jQueryが応答をjavascriptとして解析しようとしていて、失敗していることです(javascriptではないため)。だからデータはブラウザで終わる - 私はそれにアクセスする必要がある!
  • dataTypeを使用する: "jsonp text"は、jsonpリクエストを送信し、その応答をテキストとして解釈すると、違いはありませんが、解析エラーです。

私が欲しいのは、jsonpリクエストからの応答にプレーンテキストとしてアクセスする方法です。あるいは、失敗したjsonpリクエストから生の応答にアクセスできる場合、それも機能します。

ありがとうございます!

コード:

ajax_url = 'https://somesite/?searchTerm='+query+'&searchType=lastname'; 
var jqxhr = $.ajax({type:"GET", 
url: ajax_url, 
dataType:"jsonp text", 
callback: "whatever", 
success:function(responseData) { 
    $('div#content').text(responseData.slice(0, 100)); 
    dbg(responseData.slice(0,100)); 
}}) 
.success(function() { alert("success"); }) 
.error(function(obj, errStr) { alert("error"); dbg("error: " + errStr + "test: " + test.responseText + this.responseTxt);}) 
.complete(function() { alert("complete"); }); 
+0

js変数にアクセスしたデータを入れてから、jsタグで囲みましたか?それがjsとして解析しようとしているのであれば意味をなさないようです。 –

答えて

8

あなたが達成しようとしている何が動作しません:サーバーが適切にjavascriptの関数呼び出しの応答を埋め込んだ場合、いつJSONPにのみ使用することができます。

サーバがファイルをブラウザに送信しても、セキュリティ上の制約からアクセスできなくなります。そのデータをスクリプト(スクリプトタグ付き)として実行するか使用してください(リンクタグを使用して)スタイルシートとして表示されますが、生のテキストが別のドメインのものであれば、それを決して検査することはできません。

データをxmlとして直接取得しようとしたところ、それは失敗しました(サイトがCORSをサポートしていないことを意味します)。トンネル応答を(あなたのサーバー側のスクリプトは、実際の要求を行い、ブラウザに送信します独自のサーバー上のプロキシを作成します

  1. :あなたは、コードのサーバー側を変更できない場合は、2つのだけの選択肢を持っています):クライアントの視点から同じドメインが適用され、XMLとしてデータをリクエストできるようになります
  2. フラッシュを使用してブラウザのセキュリティをバイパスします(flXHRを使用できますが、 。
+0

ありがとう!悲しいかな、これは私が疑ったものです。私はCORS(サーバーは間違いなくそれをサポートしていません)と同じ発信元ポリシーについて読んでいましたが、サーバーがjsonpに応答を送信しても、それを検査することはできません。私はオプション1(自分のサーバーを介してプロキシ)を実行することを検討しましたが、残念ながらクライアントを認証する必要があります。私はflXHRにショットをつけます。再度、感謝します。 –

+0

クライアントの認証ブラウザ/フラッシュに関しては、興味のある質問があります:http://stackoverflow.com/questions/2161401/does-flash-player-transmit-session-cookies-automatically –

関連する問題