JavaScript MISBEHAVING - >交叉原始资源例外

时间:2016-05-17 10:16:13

标签: javascript php ajax

经过长时间的研究和调试,我意识到java脚本不是问题,我更倾向于抛出一个cross origin resource exception,因为ajax请求无法读取我的服务器脚本或者没有权限访问我的服务器脚本。 所以我尝试下面的代码,但仍然是同样的问题,我把问题放在红色块打击,我的java脚本也在下面和我的服务器脚本

$('#send').on('click', function(e) {
  var name = $('#name').val();
  var email = $('#email').val();
  var message = $('#message').val();
  alert("sending " + name + email + message);// this part is now working fine
  $.ajax({
    type: "POST",
    url: "https://xxxxxx/xxxxx/php/contact/maincontact.php",
    data: {
      nme: name,
      ema: email,
      msg: message
    },
    dataType: 'json',
    timeout: 10000,
    async: true,
    cache: true,// I removed the header which used to here before
    error: function(jqXHR, textStatus, errorThrown) {
      alert("error : " + errorThrown + " text :" + textStatus + " j :" + jqXHR.status);
      alert(jqXHR.responseText);
    },
    success: Succeeded
  });

});


function Succeeded(result) {
  alert("Successing");
  var data = JSON.parse(result[0]);
  try {
    $('#name').val(" ");
    $('#email').val(" ");
    $('#message').val(" ");
    if (data == true) {
      alert("We will Contact you shortly");
    } else {
      alert("OOpps! something went wrong");
    }

  } catch (e) {
    alert("You may not enter " + e);
  }
}
  

阻止跨源请求:同源策略禁止在https://xxxxxxxx/xxxxxx/php/contact/maincontact.php读取远程资源。 (原因:在CORS标题中缺少令牌' access-control-allow-origin'来自CORS预检频道的访问控制允许标题)。

<!-- php codes -->
<?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('contact.php');

if(!empty($_POST)){

    $addcase = new contact();
    $data['vlu'] = $addcase->add($_POST['nme'], $_POST['ema'],     $_POST['msg']);
    echo json_encode($data);

}else{
   echo "Not properly parsed";
}


?>

1 个答案:

答案 0 :(得分:0)

错误消息显示:

  

在CORS预检频道的CORS标题“Access-Control-Allow-Headers”中缺少令牌“access-control-allow-origin”

因此,当您提出请求时,您正试图将access-control-allow-origin放入标题中。 (该消息表示浏览器询问服务器是否允许在跨源Ajax中发送该标头,并且服务器没有说可以这样做)。

这没有任何意义。 Access-Control-Allow-Origin是响应标头。没有理由把它放在请求上。

现在,您提供的代码不会尝试设置该标头。这表明你的代码中的别处正试图普遍地设置它(可能是通过ajaxsetup)。

您需要找到尝试设置它的位置并删除该代码。