簡體   English   中英

為什么我的 ajax get 請求即使成功也響應錯誤?

[英]Why is my ajax get request responding with an error even though it was successful?

我正在嘗試從第 3 方域中檢索一些數據。 當我輸入請求 url 時。 我能夠看到我請求的數據。 但是當我嘗試使用 ajax(到不同的域)進行調用時,它返回錯誤消息。 為什么我無法檢索數據? 它可能與跨域策略而不是使用 jsonp 有關嗎? 這是我的代碼:

<script>
    $(document).ready(function() {

            $.ajax ({
                type: 'GET',
                url: 'https://crm.zoho.com/crm/private/json/Potentials/searchRecords?authtoken=xxx&scope=crmapi&criteria=(((Potential%20Email:test2@email.com))&selectColumns=Potentials(Potential%20Name)&fromIndex=1&toIndex=1',               
                dataType: 'json',
                success: function(test) {
                    alert(JSON.stringify(test));
                },
                error: function(test) {
                    alert(JSON.stringify(test));
                }

            });

     });
</script>

因為您發送的請求被瀏覽器阻止了。 當您使用對象 XmlHttpRequest 和顯然 javascript 執行請求時,瀏覽器應用了 WC3 中定義的跨域策略,從而在 url 中驗證源域和目標域(協議、主機和端口),如果這些元素在不同的域中(即主機和端口),那么請求永遠不會從瀏覽器(又名用戶代理)發出。 您可以使用 jsonp 來“中斷”或“跳轉”此策略,只需使用名為“jsonCallback=?”的參數在不同域中定義的資源 (src) 標記“腳本”即可。 在查詢字符串中添加,誰真正接收格式為json的數據。 這更難看並且有安全風險,因此永遠不要使用。 另一種方法是使用和啟用一種稱為“CORS”(跨域請求共享)的“技術”(不止於此),其中客戶端(瀏覽器)和服務器(不同域的資源)發送、交換和協商一個 Http 標頭,以確保發送和接收的人有權交換信息。 實現CORS的基本步驟是:

  1. 在客戶端 (ajax-jquery) 中明確定義 CORS 將在請求中使用,指定 CrossDomain:true。 這將啟用 CORS 中定義的 HTTP 標頭

  2. 在 HTTP 服務器中指定一個 HTTP 標頭,指示有權調用服務器中托管的資源的域源。 最通用的標頭可以定義為: Access-Control-Allow-Origin ,值為一個域,如“*”(所有域已授權)(Access-Control-Allow-Origin,*)

  3. 在某些瀏覽器中,有時他們會發送一個名為“預檢請求”的 http 標頭請求,就像通過發現來了解服務器是否准備接收跨域請求一樣。 此 Http Header 包含分配給“OPTIONS”的“Method HTTP”值或“Verb HTTP”(如 PUT、POST、GET、DELETE),那么服務器也必須配置為接收帶有方法“OPTIONS”的 HTTP 標頭,因此允許方法 http,如 PUT、DELETE、POST 或 GET。 一般而言,當請求中有一個方法 HTTP "OPTIONS" 時,服務器必須具有此標頭:

Access-Control-Allow-Methods , "POST, PUT, DELETE, GET, OPTIONS" Access-Control-Allow-Headers, ", "Content-Type, Accept"

  1. 最后,客戶端(ajax)將從服務器接收數據。

這聽起來有點混亂,步驟很少,抱歉沒有放示例代碼,但是,CORS確實不難理解。

我希望這將有所幫助。

Mozilla 的參考資料: https : //developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

這顯示了 CORS 是什么,您可以在配置服務器中使用: http : //enable-cors.org/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM