小编典典

来自本地文件的jQuery ajax POST无法访问跨域

ajax

就像标题所说的那样,我正在尝试使用jQuery
AJAX调用http://host:port/...或访问http://localhost:8080/...本地HTML文件来访问(POST)c:\home.html。我无法正常工作。

我做了Google,在这里也看到了几个问题,但无法正常工作。我需要一些帮助。到目前为止,这是我尝试过的。

  1. dataType:jsonp
  2. crossDomain:正确
  3. 在响应中设置标题:

    response.setHeader(“Access-Control-Allow-Origin”, “*”);

三种浏览器均无法运行-IE,FF或Chrome。该请求永远不会到达服务器。这是我看到的一些错误。

  1. 如果不使用jsonp,则不传输(IE)。
  2. NS_BINDING_ABORTED /在FF中加载内容(NS_ERROR_DOCUMENT_NOT_CACHED)时出错

这是我的代码。我将不胜感激任何帮助。我正在使用jquery-1.8.2.min.js

var http_host =  "http://localhost:8080";

function su (pc, p) {
    var suUrl = http_host + "/ps/api/v2/authorize.json";

    $.ajax({
        type: 'POST',
        url: suUrl,
        data: {
            phone_cell: pc,
            password: p,
        },
        dataType: "json",
        crossDomain: true,
        success: osu,
        error: oe
    });
    return false;
}

function osu (d) {
    console.log(d);
}

function oe(xhr, ts, et)     {
    alert("ServerError: " + et);
}

一个例子就是完美的指针。


阅读 543

收藏
2020-07-26

共1个答案

小编典典

我想我的代码被我尝试过的所有不同解决方案弄得一团糟。我终于能够通过设置标头来使用它(建议并为其他人使用的解决方案)。我要做的就是将以下内容添加到我的REST服务响应中。

response.setHeader("Access-Control-Allow-Origin", "*");

更新:

我以为我知道了,但我没有。它不仅仅是设置标题。无论如何,在我的特定情况下。我试图从专用于chrome的硬盘驱动器上运行我的应用程序(html,js),并尝试访问云上可用的Web服务。

这是我终于解决问题的方法。我使用以下参数启动了chrome。

--disable-web-security -–allow-file-access-from-files

就像我之前提到的,这个应用程序实际上是一个桌面应用程序,它将作为Chrome嵌入式框架的一部分运行。

谢谢各位的意见。

2020-07-26