无法在域和子域之间检索数据

时间:2016-08-04 10:49:34

标签: javascript php html ajax cross-domain

我在domian xyz.com上有一个Ajax请求,我正在执行 来自xyz.com的Ajax请求从abc.xyz.com提取数据

var request = $.ajax({
        type: "POST",
        url: "https://abc.mno.com/vending/mainvending.php",
        data: {vlu:"1"},
        dataType: 'json',
        timeout: 10000,
        crossDomain: true,
        async: true,
        cache: false,               
        headers: { "cache-control": "no-cache" },
        error: function(  jqXHR, textStatus, errorThrown )
               { 
                    alert("error : " + errorThrown + " text :"+textStatus + " j :" +jqXHR.status);
                    // alert(jqXHR.responseText);
               },
        success: Succeeded,
        beforeSend: function( xhr ) { }
});

但我一直收到这个错误,这个错误在浏览器中被安慰(Chrome)

  

XMLHttpRequest无法加载https://abc.xyz.com/vending/mainvending.php。预检响应中的Access-Control-Allow-Headers不允许请求标头字段缓存控制。

在mainvending.php中,代码如下

<?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PATCH, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token');
require_once 'vendors.php';

if(!empty($_POST)){
    /** Other codes follow **/
}else{
    /** Other codes follow **/
}
?>

我不做什么或我做错了什么?域名是xyz,我从子域检索数据的域可能是问题,我该如何解决这个问题。

3 个答案:

答案 0 :(得分:0)

尝试设置这些标题

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: PUT, GET, POST");
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");

答案 1 :(得分:0)

您可以执行以下两项操作之一: -

  1. 从AJAX配置中删除此键值对

    headers: { "cache-control": "no-cache" },

  2. cache-control标头添加到您的PHP代码中以允许它。

    header('Access-Control-Allow-Headers: Origin, Content-Type, X-Auth-Token, cache-control');

答案 2 :(得分:0)

您的错误消息显示服务器不允许您发送缓存控制标头。

你在这里这样做:

headers: { "cache-control": "no-cache" },

... cache-control是响应标头,因此将其包含在请求中是没有意义的。

删除该行。

(或者,您可以将其添加到您已设置的Access-Control-Allow-Headers标题中。