在ajax中为Cross-Origin添加标头,不起作用

时间:2015-03-10 12:18:26

标签: javascript php jquery ajax cross-domain

当我在ajax中将标题HTTP_X_REQUESTED_WITH添加到另一个服务器的请求时,它将erorr作为Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://www.xxxxxxxxxxxx.com/checkurl.php?action=xxxxxxx. This can be fixed by moving the resource to the same domain or enabling CORS.

如果我删除此标题,它就能正常工作。

我有很多ajax请求所以我使用这种格式在所有ajax请求中添加标头

 $(document).ajaxSend(function (event, jqxhr, settings) {
     jqxhr.setRequestHeader('HTTP_X_REQUESTED_WITH', 'XMLHttpRequest')
 });

我的ajax是:

 $.ajax({
    url:sitePath+'Xxxxxxxxx/checkurl.php?action=Pages&page='+actionPage,
    type :'POST',
    crossDomain:true,
    success : function(data){
        hideLoadingDiv();
        if(data.getElementsByTagName("message")[0].getElementsByTagName("messageType")[0].childNodes[0].nodeValue=="SUCCESS")
        {
            document.getElementById(divID).innerHTML=data.getElementsByTagName("PageBody")[0].childNodes[0].nodeValue+'<span><a onclick="return checkRegistrationValidation();" href="javascript:void(0);" class="orengeBtn">Back</a></span>';
            displayDiv(divID);
        }
        else if(data.getElementsByTagName("message")[0].getElementsByTagName("messageType")[0].childNodes[0].nodeValue=="ERROR")
        {
            showErrorMessage(data.getElementsByTagName("message")[0].getElementsByTagName("messageText")[0].childNodes[0].nodeValue);
        }
        else
        {
            generalError();
        }
    },
    error:function(xhr,ajaxOptions, thrownError){
        hideLoadingDiv();
        if(xhr.status==200){
            generalError();
        }
        else{
            networkError();
        }
        if(debugMode==1){
            displayAjaxError(xhr,thrownError);
        }
    }
});

在我的服务器文件中我使用

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

但每次添加标题时都会出错。并在删除正常工作后。请帮忙。

1 个答案:

答案 0 :(得分:0)

你可以在这里找到答案:

Cross-Domain AJAX doesn't send X-Requested-With header

  

您必须在ajax中手动添加标题:

$.ajax({
    url:sitePath+'Xxxxxxxxx/checkurl.php?action=Pages&page='+actionPage,
    type :'POST',
    crossDomain:true,
    headers: {'X-Requested-With': 'XMLHttpRequest'}
     

或使请求不跨域:

$.ajax({
    url:sitePath+'Xxxxxxxxx/checkurl.php?action=Pages&page='+actionPage,
    type :'POST',
    crossDomain:false,