2017-11-07 11 views
1

私はスクリプトタグを使用する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の必要があるようにすべての作品。私はこれを解決するために何をすべきですか?すべてのヘッダがそれをチェックアウトすることができ、任意のヘッダに含まれていない可能

+1

Safari devtoolsコンソールに表示されている正確なエラーメッセージ(もしあれば)を編集/更新し、正確なエラーメッセージを追加するには、おそらくhttps://stackoverflow.com/q/47166384/441757を使用します。また、Safari devtoolsの[ネットワーク]タブに移動して、HTTPステータスコードやHTTPメソッド、すべてのヘッダーなど、関連するすべてのリクエストと応答の詳細を確認してリロードし、それらを質問に追加すると役立ちます – sideshowbarker

+0

@sideshowbarker私はMacにアクセスできないが、私はremotedebug-ios-webkit-adapterを使ってiphoneでデバッグすることができ、エラーはない。コンソールログ "Status:0"しか表示されません。ネットワークタブで私は私のAJAX呼び出しを見ません、それはまったく呼び出されないようです(しかし、私は私のテストをしている同じドメインにURLを変更する場合は動作します)。 –

答えて

0

てみ

アクセス制御 - 許可 - ヘッダ:*常にそれは愚かな間違いだったよう

0

。私は 's'を 'https'に入れるのを忘れていました。あなたがhttpsウェブサイトからhttp urlへのリクエストをした場合、サファリはそのリクエストを送信しようとしません。

関連する問題