2

jQuery を使用して REST Web サービスにアクセスしようとしています。Firebug によると、このサービスは Access-Control-Allow-Origin が * に正しく設定されており、Chrome/Firefox でアクセスしても問題はありません。ただし、IEでは機能しません。

すでに投稿されているこの質問のバリエーションをたくさん調べましたが、これまでのところ、どの解決策もうまくいきませんでした。

これが私のコードです(読みやすくするために成功/失敗関数の内容を簡略化しています):

$.support.cors = true;
$.ajax({
   url: 'https://api.guildwars2.com/v1/maps.json?callback=?',
   cache: false,
   type: 'POST',
   dataType: "jsonp",
   success: function() { alert("Success!"); },
   error: function() { alert('Failed!'); }
});

またGET、タイプとしても、コールバックの有無にかかわらず機能しません。

また、jQueryなしで機能させようとしましたが、成功しませんでした:

var xdr = new XDomainRequest();
var url = "https://api.guildwars2.com/v1/maps.json?callback=?";
if(window.XDomainRequest)
{
    if(xdr)
    {
        xdr.onsuccess = function(){alert('Success!');};
        xdr.open("get",url);
        xdr.send();
    }
    else
    {
        alert('Failed!');
    }
}

file_get_contents()自分のサーバーでPHPを使用してWebサービスを単純​​にミラーリングすることを検討しているので、誰かが私に与えることができるアドバイスは大歓迎です.

4

2 に答える 2

0

私もこの問題を抱えており、クライアントの Web サービスの制限により、インターネットからのすべてのソリューションが失敗したか、適用できませんでした。(JSONP、XDR、コード)

このために、クライアントのサーバーにあるページに iframe を追加しました。したがって、データを iframe に投稿すると、iframe はそれを Web サービスに投稿します。したがって、クロスドメイン参照は排除されます。

許可されたページのみが iframe との間でデータを投稿することを確認するために、双方向のオリジン チェックを追加しました。

それが役に立てば幸い

<iframe style="display:none;" id='receiver' name="receiver" src="https://iframe-address-at-client-server">
 </iframe>

//send data to iframe
var hiddenFrame = document.getElementById('receiver').contentWindow;
hiddenFrame.postMessage(JSON.stringify(message), 'https://client-server-url');

//The iframe receives the data using the code:
window.onload = function () {
    var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
    var eventer = window[eventMethod];
    var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
    eventer(messageEvent, function (e) {
        var origin = e.origin;
        //if origin not in pre-defined list, break and return
        var messageFromParent = JSON.parse(e.data);
        var json = messageFromParent.data;

        //send json to web service using AJAX   
        //return the response back to source
        e.source.postMessage(JSON.stringify(aJAXResponse), e.origin);
    }, false);
}
于 2014-12-17T17:08:25.207 に答える