5

正如标题所说,我正在尝试使用 jQuery AJAX 调用来访问(POST)一个 web url,http://host:port/...或者http://localhost:8080/...从一个本地 HTML 文件,c:\home.html. 我无法让它工作。

我做了谷歌,也在这里看到了几个问题,但我无法让它工作。我需要一些帮助。这是我到目前为止所尝试的。

  1. 数据类型:jsonp
  2. 跨域:真
  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);
}

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

4

2 回答 2

4

我想我的代码被我尝试的所有不同解决方案弄乱了。我终于能够通过设置标题来让它工作(推荐并为其他人工作的解决方案)。为了让它工作,我所要做的就是将以下内容添加到我的 REST 服务响应中。

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

更新:

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

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

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

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

谢谢各位的意见。

于 2012-12-11T09:40:56.023 回答
3

您不能从本地文件发出跨域请求,因为它不在上。您需要托管C:\home.html在本地网络服务器实例上才能使其工作。

于 2012-12-11T08:40:37.677 回答