[英]“Security Err: Dom Exception” thrown when nesting ajax calls
這是問題。 我正在通過javascript / jquery中的ajax調用提取gmail聯系人,如下所示:
function getUserInfo() {
var xml_parse = "";
$.ajax({
url: SCOPE + '?max-results=9999&access_token=' + acToken
data: null,
success: function (resp) {
xml_parse = $.parseXML(resp);
callGmailHelperWebService(xml_parse);
},
dataType: "jsonp"
});
}
function callGmailHelperWebService(xml_parse) {
GmailHelperService.ConvertXMLToList(xml_parse, onSuccess, onFailed, null);
}
因此,如您所見,如果初始ajax調用成功,那么我將調用一個函數,該函數調用作為我的項目位於保存服務器上的Web服務(實際上,它是項目的一部分)。
我的Web服務(GmailHelperService)已正確連接,因為我可以肯定在其他地方調用它(例如,在此Ajax調用之后)。 但是,當我嘗試在ajax調用的“成功”部分中調用它時,出現以下錯誤:
未捕獲的錯誤:SECURITY_ERR:DOM異常18
我的理論是,這與跨域問題有關,但是我不明白為什么。 我當然不知道該如何解決。
我將不勝感激。
JSONP是一種數據傳輸方法,涉及以這種格式發送數據:
callback({"foo":"bar"});
如您所見,這不是xml。 它是用JSON包裝的回調方法,該方法將在請求完成加載后執行,因此可以跨域使用,因為可以使用<script>
標記進行請求。
您不能簡單地將dataType更改為JSONP並返回xml,期望它能正常工作。 XML!= JSONP。 但是,您可以在jsonp中返回XML,例如callback({"xml","... xml string here "})
但要注意引號,所有json鍵和值必須用雙引號引起來,需要用內引號引起來妥善處理。
如果您的請求是相同的域請求(相同的協議,相同的子域,相同的域和相同的端口),那么如果要返回XML,則可以將dataType更改為“ XML”。 否則,您需要設置代理腳本來為您獲取xml,或者讓您的Web服務返回JSONP。
例如,以下網址彼此都被視為跨域。
http://example.com
http://www.example.com
https://example.com
https://www.example.com
http://example.com:8080
以上所有URL都被視為跨域的,即使它們位於同一服務器上。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.