1

この議論に関する他の多くの質問を読みましたが、私の問題を解決できるものはありませんでした。この方法でphpページを呼び出します。

$.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と同じサーバーに置くと、うまくいきます。ローカルホストから起動すると問題が発生します。その場合、xhr: で以下を受け取ります readyState=0, status=0, statusText="error"。トピックに関するいくつかの回答を読むと、同じオリジンの制限が原因であると思われるため、呼び出しにいくつかのパラメーターを追加しました。特に:

   dataType:"jsonp",
   crossDomain: true,

どうやらこれはうまくいくようreadyState=4, status=200, statusText="success"です。問題は、textStatus="parsererror". また、運が悪い多くの構成で、、、、などjsonpCallbackの他のことも試しました。cacheasyncjsonp

今、私はデータを受け取りません。なぜなら、この呼び出しは私が必要とする Cookie だけを私に与えるからです。

私の質問は次のとおりです。まず、私は物事を正しく行っていますか? どちらの場合も、そのようなエラーの理由は何ですか? 単純な http/GET ではなく、「https」/POST を呼び出したという事実は何かを変更しますか?

2 番目の質問は、後で SOAP リクエストを介していくつかの Web サービスを呼び出す必要があるということです。これにより、データが xml で返されます。この同じ手法を使用してもうまくいきますか (jQuery ドキュメントに問題dataType:"jsonp xml"がなく、その場で変換するように記述できると仮定します (また、それが適切な手法であると仮定します))? jsonp はcallbackFN({...})xml ではなく行に何かを期待しているので、そうではないと思いますよね?

これがどれも正しくない場合、続行する正しい方法は何ですか? サーバーに触れることができないため、クライアント側に限定されます。

4

2 に答える 2

2

dataTypeとして設定するとJSONP、データは JSON としてのみ取得できます。

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

于 2012-04-19T12:54:20.813 に答える
0

JSONP は JSON 形式のデータ専用です。したがって、parseerror を受け取った場合、これは PHP の出力が整形式の JSON ではない可能性があることを意味します。

いいえ、JSONP 呼び出しへの応答として XML を使用することは容易ではありません。

于 2012-04-19T12:53:16.390 に答える