0

spree 1.2.4 と Rails 3.2.11 を使用して e コマース プラットフォームを実行しています。チェックアウト プロセスで、サーバーに ajax コールバックを実行して情報を更新しようとしています。チェックアウト プロセス全体で SSL が使用されます (https は URL に含まれています)。ajax 呼び出しがキャンセルされているようです。SSL暗号化のためだと思います。Chrome を見ると、HTTP ステータスは "(cancelled)" とだけ表示されます。私のajax呼び出しは次のとおりです。

    $.ajax({
        url: '/orders/get_update_cart_fields'
    }).done(update_cart_fields);

ssl_required :get_update_cart_fields注文コントローラーにもあります

なぜこれが起こっているのか、私のajax呼び出しが機能するように修正する方法は誰にも分かりますか?

4

2 に答える 2

1

Web ページが http ドメインから読み込まれている場合、同じドメインへの Ajax 呼び出しで https プロトコルを使用するものは、クロスドメイン リクエストと見なされます。通常、これは失敗します。これは、ブラウザーが同一生成元ポリシーを強制するためです。

幸いなことに、ほとんどのブラウザーでは、サーバーを正しく構成することでクロスオリジン リソース共有を有効にできます。これを行う方法の詳細は、サーバーによって異なります。ガイダンスと詳細については、このサイトを参照してください。基本的に、唯一の要件は、サーバーが Ajax 応答に次のヘッダーを含めることです。

Access-Control-Allow-Origin: *
于 2013-03-24T00:44:31.720 に答える
0

わかりました、解決しました。それを機能させるために私がしなければならなかったことは次のとおりです。

アヤックス:

    $.ajax({
        'url': location.protocol + '//' + location.host + '/' + '/orders/get_update_cart_fields'
    }).done(update_cart_fields);

オーダーコントローラーで:

ssl_allowed :get_update_cart_fields

これらの両方を行った後、動作するようになりました。多くの情報源によると、ajax呼び出しはhttp(s)かどうかを自動的に判断する必要がありますが、何らかの理由で手動で行う必要がありました。

于 2013-03-24T18:28:50.413 に答える