2012-04-19 20 views
1

私はこの議論に関する他の多くの質問を読んだことがありますが、誰も私の問題を解決できませんでした。 私はこの方法でPHPページを呼び出します。200/'parsererror' jquery with ajax投稿者https

$.ajax({ 
     url: 'https://mydomain/page.php', 
     type: "POST", 
     data: { 
      "arg1": arg1, 
      "arg2": arg2 
     }, 
     success: function(data, textStatus, xhr) { 
      //do stuff 
     }, 
     error: function(xhr, textStatus) { 
      alert("doLogin\n- readyState: "+xhr.readyState+"\n- status: "+xhr.status); 
     } 
    }); 

ここで、私はこの物をPHPと同じサーバーに置くとうまくいきます。トラブルはlocalhostから起動すると始まります。 その場合、xhrには次のように表示されます。 readyState=0, status=0, statusText="error" 同じ起源の制限のためにあると思われるトピックに関するいくつかの回答を読んで、私は呼び出しにいくつかのパラメータを追加しました。特に:

dataType:"jsonp", 
    crossDomain: true, 

これは明らかにこれがうまく働いているため、私はreadyState=4, status=200, statusText="success"を受け取りました。問題は、textStatus="parsererror"です。 jsonpCallbackcacheasyncjsonpなど多くの構成で、運がないということも試しました。

ここでデータは返されません。この呼び出しで必要なCookieのみが提供されるためです。

私の質問は次のとおりです。どちらの場合も、このようなエラーの理由は何ですか?私が 'https'/POSTと呼ぶという事実は、単純なhttp/GETではなく、何か変わるのでしょうか?

2番目の質問は、後でsoapリクエストによっていくつかのwebservicesを呼び出す必要があります。これはxmlでデータを返します。この同じテクニックを使用することはできますか?(jQueryのドキュメントがうまくいれば、dataType:"jsonp xml"を書いて飛行機に変換することができます(それも正しい手法であると仮定します))? jsonpがxmlよりむしろcallbackFN({...})の行に何かを期待しているので、私はそれがないと思いますか?

これが間違っている場合は、正しい方法は何でしょうか?私はサーバーに触れることができないので、私はクライアント側に限られています。

答えて

0

JSONPはJSON形式のデータのみです。あなたがParseErrorのを受け取るのであれば、これはあなたのPHPの出力が整形JSON

ではないかもしれませんそして、いや、JSONP呼び出しへの応答としてXMLを持つことが容易に可能ではないことを意味..

+0

どうしたらいいですか?プロキシを設定せずにXMLを取得する方法はありますか? – Stephan

+0

私は、データ型: "jsonp xml"を使用することが可能でなければならないと言うことを認めています。しかし、ドキュメントも詳細を提供していません...他のstackoverflowトピックでもまだそれをカバーしていませんでした...興味深い – devnull69

2

あなたの場合dataTypeJSONPと設定すると、データはJSONとしてしか取得できません。

URL(https://mydomain/page.php)がJSONオブジェクトに応答しないと、構文解析しようとすると失敗するため、解析エラーが発生します。

+1

なぜドキュメントは言う:_ "jQuery 1.5の時点で[...] JSONP jsonp text xml "と同様に、" jsonp xml "のような省略形の文字列は、まずjsonpからxmlへの変換を試み、失敗した場合、jsonpから変換しますtextからxmlに変換します。 "_ ' dataType: "jsonp text"を置くと、それはうまくいきます。なぜなら、それをテキストとして扱うからです。私はまだ同じエラーが発生します。 – Stephan

+0

私はjsonpのために複数のdataTypeを使用できることを知りませんでした。しかし、これは不可能なようです。なぜなら、jsonpリクエストには異なるリクエストタイプがあるからです。そして、実際に私はそれのように働くシンプルなものを見たことがありません。そして、あなたは[yql](http://developer.yahoo.com/yql/)を使うことができます。 – ocanal