【问题标题】:Does a proxy needed for a cross domain Ajax call if no return is expected?如果不期望返回,跨域 Ajax 调用是否需要代理?
【发布时间】:2018-08-22 17:35:43
【问题描述】:

我有一个跟踪系统,它使用 JavaScript 将 Ajax 调用发送到远程服务器。预计不会从服务器返回值。

这是 Ajax 调用:

window.onbeforeunload = function () {
    $.ajax({
       url: "https://remoteURL.com/r/",
       type: "get",
       async: false,
       xhrFields: {
          withCredentials: true
       },
       data: {
          tagid: "123"  
       }
    }).done(function () {
       console.log("sent");
    });
};

谷歌浏览器显示请求发送成功:

问题是我没有得到sent控制台日志,但是这个错误:

Failed to load https://remoteURL.com/r/: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://myWebSite.com' is therefore not allowed access.

我无法访问外部服务器,因此无法更改标头。

如果我不期望 Ajax 中调用的远程 URL 有任何返回,那么尽管控制台中抛出了有关跨域策略的错误,这段代码是否仍然有效?

【问题讨论】:

  • 不,无论您是否期望得到回复,CORS 旨在限制不应允许的访问。在这种情况下,异地端点不允许您的域通过 ajax 远程访问它。
  • 既然有async: false,为什么还要使用done
  • 是的,您的代码可以正常工作 - 它只是无法访问结果。你真的需要那个“发送”来登录吗?
  • @Bergi 不,我不需要 .done() 回调,但是当我删除它时并没有太大变化

标签: javascript jquery ajax proxy cross-domain


【解决方案1】:

Access-Control-Allow-Origin 是浏览器的限制,所以请求没有被发送。要进行这种跟踪(无需从服务器发送请求),您可以使用 <a>ping 属性,如下所示:

<a href="https://example" ping="https://example/trackpings">

在这种情况下,该 ping 向 https://example/trackpings 发送了一个无效的发布请求。

【讨论】:

    猜你喜欢
    • 2011-03-06
    • 2014-05-13
    • 1970-01-01
    • 1970-01-01
    • 2011-07-03
    • 1970-01-01
    • 2011-12-19
    • 2013-06-23
    • 2015-03-23
    相关资源
    最近更新 更多