jQuery ajax POST从本地文件访问跨域无法正常工作

时间:2012-12-11 08:27:58

标签: ajax jquery cross-domain cors

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

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

  1. dataType:jsonp
  2. crossDomain:true
  3. 在我的回复中设置标题:
  4. response.setHeader("Access-Control-Allow-Origin", "*");
    

    这三种浏览器都不起作用 - IE,FF或Chrome。请求永远不会到达服务器。以下是我看到的一些错误。

    1. 如果不使用jsonp,则不传输(IE)。
    2. NS_BINDING_ABORTED /在FF中加载内容(NS_ERROR_DOCUMENT_NOT_CACHED)时出错
    3. 这是我的代码。我将不胜感激任何帮助。我正在使用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);
      }
      

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

2 个答案:

答案 0 :(得分:4)

我想我的代码搞砸了我正在尝试的所有不同的解决方案。我终于能够设置标题(推荐并为其他人工作的解决方案)。我必须做的就是将其添加到我的REST服务响应中。

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

更新

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

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

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

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

感谢每一位人士的意见。

答案 1 :(得分:3)

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