3

AJAX (リクエスト) を使用して eBay FindProducts API を呼び出そうとしましpostたが、次のエラーでスタックしました:

XMLHttpRequest はhttp://open.api.ebay.com/shopping?callname=FindProductsを読み込めません。Origin http://localhost.com/test.phpは Access-Control-Allow-Origin で許可されていません。

私のコード:

$.ajax
({
    type: "POST",
    url: 'http://open.api.ebay.com/shopping?callname=FindProducts',
    dataType: ($.browser.msie) ? "text" : "xml",
    contentType: 'application/x-javascript',
    crossDomain : true,
    data: {
        'X-EBAY-API-APP-ID' : 'ebayAppId', 
        'X-EBAY-API-VERSION': '771', 
        'X-EBAY-API-SITEID': '0', 
        'X-EBAY-API-REQUEST-ENCODING': 'NV', 
        'X-EBAY-API-RESPONSE-ENCODING': 'json',
        'QueryKeywords' : '753759971632',
        'MaxEntries' : '3'
    },
    success: function (result) {
        alert('success');
        alert(result);
    },
    error: function (data) {
        alert((data));
    }
})

どうすればこのエラーを解決できますか。

設定してみdataType : jsonpました(XMLが取得されていることはわかっていますが、エラーを回避するためにjsonPに設定しました)。動作しますが、json 応答が予期されていたため、jQuery は XML を解析できませんでした。

4

3 に答える 3

8

URLに追加すると、ドキュメント&responseencoding=JSONによるとJSONとして応答が返されます

UPDATE 作業例。私がやったことは、私がdataType:'jsonp'追加に変更したことjsonp:'callbackname'です。jQueryはデフォルトでコールバックパラメータcallbackを呼び出しますが、eBayはそれが呼び出されることを期待しているためcallbacknameです。あなたがしなければならないことはあなたのパラメータをデータマップに追加することです。正しいパラメータ名を使用していることを確認し、ドキュメントを確認して、ヘッダーメソッドではなくURLメソッドを使用してください。お役に立てれば。

于 2012-05-21T21:34:05.160 に答える
0

jQuery.ajax()のドキュメントを読むと、 jsonpを使用でき、解析対象の戻り値の型が異なります。

スペースで区切られた複数の値: jQuery 1.5 以降、jQuery は dataType を Content-Type ヘッダーで受け取ったものから必要なものに変換できます。たとえば、テキスト応答を XML として処理する場合は、dataType に「text xml」を使用します。また、JSONP リクエストを作成し、それをテキストとして受け取り、jQuery によって XML として解釈することもできます: 「jsonp text xml」。同様に、「jsonp xml」などの短縮文字列は、最初に jsonp から xml への変換を試み、失敗すると jsonp からテキストに変換し、次にテキストから xml に変換します。

dataTypeしたがって、基本的には、コード行を次のように変更するだけです。

dataType: ($.browser.msie) ? "jsonp text xml" : "xml",

または、別の回答&responseencoding=JSONに記載されているように、URL にパラメーターを追加することもできます。

于 2012-05-21T21:36:59.387 に答える
0

アルビンに感謝します。

dataType:'jsonp' に変更し、jsonp:'callbackname' を追加しました。jQuery はデフォルトでコールバック パラメータ callback を呼び出しますが、eBay はそれが「callbackname」と呼ばれることを期待しているためです。eBay の CRO の問題により、XML が機能していませんでした (要確認)。

Chrome コンソールを使用して、取得したオブジェクトをデバッグし、JSON.Stringify() を使用して文字列に変換しました。

これが誰かに役立つことを願っています!

乾杯、ラジェッシュ

于 2012-05-22T05:31:06.510 に答える