【问题标题】:Ajax calls to a CORS disabled service对 CORS 禁用服务的 Ajax 调用
【发布时间】:2015-01-07 13:35:23
【问题描述】:

是否可以使用 javascript 从禁用 CORS、仅返回 XML 数据(无 json/jsonp 选项)和通过 HTTPS 的 Web 服务使用数据?我无法控制此 Web 服务来进行更改。

充其量,如果我运行以下 ajax,我会看到一个 xml 响应被发回(使用 Chrome 的开发人员工具),但是我的成功函数没有被命中,我最终会得到一个异常“意外语法

如果我将 dataType 更改为 'xml',我将在标头响应中找到错误“Access-Control-Allow-Origin”。这就是我想要的,除非他们没有启用 CORS。

$.ajax({
      url: 'https://' + myURL + querystring,
      username: usr,
      password: pwd,
      dataType:'jsonp text xml',
      type: 'GET',
      success: function (data) {
          console.log( "success" );
      },
      cache: false,
      contentType: false,
      processData: false
});

【问题讨论】:

    标签: javascript ajax xml ssl cors


    【解决方案1】:

    不直接。

    您可以编写自己的网络服务与之交互,然后通过 JavaScript 访问您的服务。

    【讨论】:

      【解决方案2】:

      你提到过,当使用dataTypejsonp时,我会得到响应。我猜webservice支持jsonp否则$.ajax无法得到响应文本。然后,你提到:

      '意外的语法

      jquery中jsonp的dateType会强制将响应文本从纯文本转换为json对象,但不幸的是响应文本以XML格式返回。

      既然webservice支持jsonp,jquery要求jsonp必须以json格式返回,为什么不用原生javascript来解决呢?

      function parseXml(xml) {
          console.log('the return xml ',xml);
      }
      document.write('<script type="text/javascript" src="https://xxxx?param=xx&callback=parseXml"><\/script>');
      

      最后,请不要现在降低我的分数,这个问题的分数几乎降到了零。

      【讨论】:

      • 问题是该服务支持 JSONP。它返回 XML 而不是 JavaScript,因此您无法使用脚本元素加载它。
      • HTML 表单也不能在标题中发送凭据,我没有指定,但显示在 ajax 中。
      猜你喜欢
      • 2021-11-10
      • 2014-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-19
      相关资源
      最近更新 更多