javascript - "Security Err: Dom Exception"嵌套ajax调用时抛出

标签 javascript jquery ajax cross-domain

问题来了。我通过 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 调用的“成功”部分中调用它时,出现以下错误:

Uncaught Error: SECURITY_ERR: DOM Exception 18

我的理论是这与跨域问题有关,但我不明白为什么。我当然不知道如何解决这个问题。

如果有任何帮助,我将不胜感激。

最佳答案

JSONP 是一种数据传输方法,涉及以以下格式发送数据:

callback({"foo":"bar"});

如您所见,这不是 xml。它是封装在回调方法中的 JSON,该回调方法将在请求加载完成时执行,从而允许它跨域,因为可以使用 <script> 来请求它。标签。

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

如果您的请求是相同域请求(相同协议(protocol)、相同子域、相同域和相同端口),那么如果您返回 XML,则可以将数据类型更改为“XML”。否则,您需要设置一个代理脚本来为您获取 xml,或者让您的 Web 服务返回 JSONP。

例如,以下网址均被视为跨域。

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

以上所有网址都将被视为跨域,即使它们位于同一服务器上。

关于javascript - "Security Err: Dom Exception"嵌套ajax调用时抛出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13139673/

相关文章:

javascript - 将用户名从 Java 发送到 iframe

JavaScript 整数溢出

jquery - 避免使用回车键提交表单 $.ajax({}) - 使用 jQuery

PHP 文件从 html 表单 [AJAX] 接收空白值

javascript - 如何使用 GET 方法通过 XMLHttpRequest 传递 FormData

javascript - 使用 ajax 和 codeigniter 通过 Controller 将数据发送到模型

javascript - WebGL 无法初始化着色器程序

Javascript - 将数组结果过滤到下拉列表中

jquery - 使用 jQuery 隐藏和显示列表菜单项

c# - Ajax Web 服务调用 - 不存在 'Access-Control-Allow-Origin' header