2013-03-24 83 views
0

我正在運行電子商務平臺使用spree 1.2.4和Rails 3.2.11,並在結帳過程中我試圖運行一個ajax回調到我的服務器更新一些信息。整個結帳過程使用SSL(https位於URL中)。 ajax調用似乎正在取消。我假設它是因爲SSL加密。如果我查看chrome,HTTP狀態只是說「(取消)」。我的Ajax調用:ajax請求導軌3服務器使用HTTPS時取消

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

我也在我的訂單控制器具有ssl_required :get_update_cart_fields

任何人有任何想法,爲什麼這種情況正在發生,以及如何解決它,所以我的Ajax調用工作?

+0

網頁是否從與請求相同的https域加載? – 2013-03-24 00:30:52

+0

我相信是這樣嗎?在進行ajax調用時,瀏覽器地址中的url是https://domain.com/checkout/address;並且ajax請求會轉到http(s).www.domain.com/orders/get_update_cart_fields。我不確定是否需要專門設置ajax調用,以便知道我使用的是https而不是http? – Zyren 2013-03-24 00:48:00

+0

我不知道你是否可以做這個實驗,但嘗試通過http加載所有內容。如果請求仍然失敗,那麼使用https不是問題的根源。 – 2013-03-24 00:53:16

回答

0

好的,解決了它。繼承人什麼我不得不這樣做,以得到它的工作:

AJAX:

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

在orders_controller:

ssl_allowed :get_update_cart_fields 

我做了這兩點後,我得到了它的工作。根據許多消息來源,ajax調用應該自動確定它的http(s)是否由於某種原因而必須手動執行。

1

如果網頁是從http域加載的,那麼使用https協議對同一個域進行Ajax調用會被視爲跨域請求。通常這會失敗,因爲瀏覽器強制執行same-origin policy

好消息是,對於絕大多數瀏覽器,您可以通過正確配置服務器來啓用跨源資源共享。如何做到這一點的細節取決於你的服務器。有關指導和更多信息,請參閱this site。基本上,唯一的要求是您的服務器在Ajax響應中包含以下標頭:

Access-Control-Allow-Origin: * 
+0

。由於某些原因,當我輸入時,stackoverflow決定隱藏超鏈接中的https。 – Zyren 2013-03-24 00:46:36

+0

@Zyren - 啊。當我發佈我的答案時,我遇到了同樣的問題;必須編輯一下才能使鏈接正常工作。我建議你嘗試啓用CORS,看看會發生什麼。 – 2013-03-24 00:47:54