Ajax跨域请求设置标头失败

Posted

技术标签:

【中文标题】Ajax跨域请求设置标头失败【英文标题】:Ajax cross domain request fail to set headers 【发布时间】:2014-11-22 00:12:56 【问题描述】:

首先,这是我的第一个跨域 ajax 请求的项目。 现在,我有一个只有一个按钮、一个输入框和 jquery 的测试页面。 我想要做的是将ajax请求发送到另一个domani(我有用户名和密码,但我不知道我必须使用它以及如何使用它)并传递一个查询,然后打印结果。

这是我的脚本:

jQuery(document).ready(function ($)
    $("#btn").on("click", function()

    var searchRequest = $("#testSearch").val();

    var url = "https://vk.com/search?c%5Bq%5D=";

    var musicSearchRequest = searchRequest + "&c%5Bsection%5D=audio";
    var vkLogin = new XMLHttpRequest();

    vkLogin.open("GET", url + musicSearchRequest, true);
    vkLogin.send();

    $.ajax(        
        url: url,
        type: "POST",
        crossDomain: true,
        dataType: 'jsonp',
        data: musicSearchRequest,
        success: function()console.log("ok");,
        error: function ()console.log("no");
    ); 

    $("#result").html(vkLogin.responseText);
    console.log(vkLogin.responseText);

);
);

这是html(我认为这并不重要,但我还是会复制):

<button id="btn">click</button>
<input type="text" id="testSearch"></input>
<div id="result"></div>

现在,点击后,这是打印到我的调试控制台的结果:

XMLHttpRequest 无法加载 https://vk.com/search?c%5Bq%5D=katy%20perry&c%5Bsection%5D=audio。不 'Access-Control-Allow-Origin' 标头出现在请求的 资源。因此不允许访问 Origin 'null'。

我搜索了一些关于 CORS 的信息,但由于我是初学者,我希望有人逐步解释下一步要如何解决此错误。

谢谢!

【问题讨论】:

【参考方案1】:

您误解了 CORS 的工作原理。这是一个很好的解释:https://vk.com/search?c%5Bq%5D=

错误信息:

No 'Access-Control-Allow-Origin' header is present on the requested resource

正在谈论从 vk.com 收到的标头。除非您控制 vk.com 上的服务器(听起来您没有),否则您无法修改 vk.com 服务器返回给您的应用程序的标头。所以这对你不起作用。

【讨论】:

以上是关于Ajax跨域请求设置标头失败的主要内容,如果未能解决你的问题,请参考以下文章

跨域 ajax 请求中的预检标头未解决授权标头

ajax跨域请求

如何从跨域 Ajax 请求访问 Content-Length 标头?

具有自定义标头和请求正文作为 JSON 字符串的跨域 jquery ajax 请求

Ajax跨域之ContentType为application/json请求失败的问题

解决携带身份信息的跨域请求