簡體   English   中英

嵌套ajax調用時拋出“ Security Err:Dom Exception”

[英]“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.

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