![](/img/trans.png)
[英]Does Ajax still gets a json even though not setting a method get request?
[英]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的基本步驟是:
在客戶端 (ajax-jquery) 中明確定義 CORS 將在請求中使用,指定 CrossDomain:true。 這將啟用 CORS 中定義的 HTTP 標頭
在 HTTP 服務器中指定一個 HTTP 標頭,指示有權調用服務器中托管的資源的域源。 最通用的標頭可以定義為: Access-Control-Allow-Origin ,值為一個域,如“*”(所有域已授權)(Access-Control-Allow-Origin,*)
在某些瀏覽器中,有時他們會發送一個名為“預檢請求”的 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"
這聽起來有點混亂,步驟很少,抱歉沒有放示例代碼,但是,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.