来自本地文件的jQuery ajax POST访问跨域不起作用

Posted

技术标签:

【中文标题】来自本地文件的jQuery ajax POST访问跨域不起作用【英文标题】:jQuery ajax POST from local file to access a cross domain not working 【发布时间】:2012-11-28 18:31:06 【问题描述】:

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

我使用 Google 并在这里看到了几个问题,但我无法让它发挥作用。我需要一些帮助。这是我迄今为止尝试过的。

    数据类型:jsonp 跨域:真 在我的回复中设置标题:
response.setHeader("Access-Control-Allow-Origin", "*");

三种浏览器都不能正常工作 - IE、FF 或 Chrome。请求永远不会到达服务器。以下是我看到的一些错误。

    如果不使用 jsonp,则不使用传输 (IE)。 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);

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

【问题讨论】:

【参考方案1】:

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

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

更新:

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

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

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

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

感谢大家的意见。

【讨论】:

【参考方案2】:

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

【讨论】:

该解决方案是桌面应用程序的一部分,并进入 CEF(Chromium Embeddd 框架)。因此,我首先尝试让它在 Chrome 上运行,并最终将其移至 CEF。关键是我无法运行本地 Web 服务器。 @user977505 那么你不能发出跨域请求。 @Jivings 您的回答部分正确,但您忘记了一些重要的事情:您可以从本地文件执行跨域请求如果您的请求没有'不执行预检请求。这可以在许多浏览器(包括 chrome 和 IE8)中通过遵循以下两条规则来完成: 请求不设置自定义 HTTP 标头,如 'application/xml' 或 'application/json' 等 请求方法必须是 GET、HEAD 或邮政。如果是 POST,内容类型应该是 application/x-www-form-urlencoded、multipart/form-data 或 text/plain 之一

以上是关于来自本地文件的jQuery ajax POST访问跨域不起作用的主要内容,如果未能解决你的问题,请参考以下文章

来自本地文件系统的 jQuery Ajax 请求(Windows 文件:///)

无法解析来自 jQuery Ajax POST 的 Json 结果

使用 mail() PHP 脚本的 jQuery AJAX 表单发送电子邮件,但来自 HTML 表单的 POST 数据未定义

jQuery - 在 AJAX POST 之后访问 PHP 数组值

启用从 jQuery ajax 到不在 IIS 中托管的 WCF 服务的 CORS POST

jQuery .ajax() POST 请求抛出 405(不允许的方法)但 GET 不会