私はスクリプトタグを使用するshopifyアプリケーションを作成しています。ショップについて必要な情報を入手するにはサーバーへのajaxコールを行う必要があります。私の同僚が彼が自分のiPhoneで全く動かないことに気づくまで、すべてがうまくいっていました。それはまたmacのサファリでは動作しませんが、それはクロムで動作します。ajaxクロスオリジンリクエストはサファリでは機能しませんが、クロムとファイアフォックスで動作します
サファリでリクエストのステータスが常に「0」であることがわかりました。テストショップにリクエストを行いました。私のサーバーではなくテストを行い、200のステータスを取得しました。だから私はそれがクロスオリジンの問題だと確信しています。
リクエストされたページで変更する必要があるヘッダーである必要がありますが、私は既に「Access-Control-Allow-Origin:*」を持っていました。
現在、これは、私が要求されたページに持っているもので、私はlaravelを使用しています:
header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: X-API-KEY, Origin, X-Requested-With, Content-Type, Accept, Access-Control-Request-Method");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE");
$shop = Shop::where("domain", request('shop'))->first();
echo json_encode(
[
'logo' => $shop->logo,
'text' => $shop->customizable_text,
'version' => $shop['plan']
]);
、これは(私がjqueryのを使用していた私は、現在JavaScriptで呼び出しを行うために使用している機能です最初私はそれが)私はJavaScriptを使用してみましたので、問題だと思った:
function ajaxRequest(url, parameters, callback){
const req = new XMLHttpRequest();
req.onreadystatechange = function(event) {
// XMLHttpRequest.DONE === 4
if (this.readyState === XMLHttpRequest.DONE) {
if (this.status === 200) {
callback(this.responseText);
} else {
console.log("Status: %d (%s)", this.status, this.statusText);
}
}
};
if(parameters.keys.length){
url = url + "?"
for(var i = 0; i < parameters.param.length; i++){
if(i == 0){
url = url + parameters.keys[i] + "=" + parameters.param[i]
}
else{
url = url + "&" + parameters.keys[i] + "=" + parameters.param[i];
}
}
}
req.open('GET', url, true);
req.send(null);
}
それはChromeとFirefoxでは、それだけでSafariの必要があるようにすべての作品。私はこれを解決するために何をすべきですか?すべてのヘッダがそれをチェックアウトすることができ、任意のヘッダに含まれていない可能
Safari devtoolsコンソールに表示されている正確なエラーメッセージ(もしあれば)を編集/更新し、正確なエラーメッセージを追加するには、おそらくhttps://stackoverflow.com/q/47166384/441757を使用します。また、Safari devtoolsの[ネットワーク]タブに移動して、HTTPステータスコードやHTTPメソッド、すべてのヘッダーなど、関連するすべてのリクエストと応答の詳細を確認してリロードし、それらを質問に追加すると役立ちます – sideshowbarker
@sideshowbarker私はMacにアクセスできないが、私はremotedebug-ios-webkit-adapterを使ってiphoneでデバッグすることができ、エラーはない。コンソールログ "Status:0"しか表示されません。ネットワークタブで私は私のAJAX呼び出しを見ません、それはまったく呼び出されないようです(しかし、私は私のテストをしている同じドメインにURLを変更する場合は動作します)。 –