嵌套 ajax 调用时引发"Security Err: Dom Exception"



这是问题。我正在通过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>标签请求。

您不能简单地将数据类型更改为JSONP并返回XML,希望它能正常工作。XML!= JSONP。但是,您可以在JSONP中返回XML,例如callback({"xml","... xml string here "}),但请注意所有JSON键和值必须用双引号包裹,内部引号需要适当处理。

>

如果您的请求是相同的域请求(相同协议,相同的子域,相同的域和相同的端口),则如果您返回XML,则可以将数据类型更改为" XML"。否则,您需要设置一个代理脚本才能为您获取XML,或者您的WebService返回JSONP。

例如,以下URL彼此视为跨域。

http://example.com
http://www.example.com
https://example.com
https://www.example.com
http://example.com:8080

即使它们在同一服务器上,上述所有URL也将被视为跨域。

最新更新