2014-09-13 1 views
0

내 프로젝트에서 Ajax를 사용하고 있으므로 header.php에서 서버에 XMLHttpRequest를 보내기위한 Javascript 코드를 사용하고 있습니다. 나는이 header.php 파일을 웹 사이트의 모든 페이지에 포함시키고있다. 문제는 여기 signin.php 페이지에서 헤더 기능을 사용하고 있습니다. 헤더에서 사용중인 Ajax 코드로 인해 작동하지 않습니다. header.php에서 해당 코드를 제거합니다. 헤더 기능은 잘 작동합니다. 제발 도와주세요.서버 헤더 ("location : index.php")에 대한 XMLHttpRequest가 작동하지 않는 경우?

header 함수 내가 signin.php에서 사용하고 있습니다 : header ("location : index.php"); header.php에 사용

아약스 코드 :

<script> 
function favourite(str) 
{ 
var xmlhttp; 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    document.getElementById("like-div").innerHTML=xmlhttp.responseText; 
    } 
    } 
xmlhttp.open("GET","add_to_favourites.php?"+str,true); 
xmlhttp.send(); 
} 
</script> 
+0

작은 질문 : 왜이 ​​게시물에 jquery 태그를 넣었습니까? Jquery에 내장 된 Ajax 함수를 사용하지 않는 이유는 무엇입니까? –

+0

@MaxLangerak 제발 나를 안내하십시오. 내 코드에서 실수를하는 경우. –

답변

0

사실, Location 헤더는 작업을 수행하지만 브라우저에서 전체 URL 변경을 트리거 대신 백그라운드에서 실행되는 Ajax 요청을 리디렉션합니다. 브라우저는 Ajax 요청의이 리다이렉션을 투명하게 처리하므로, #like-div의 내용은 index.php의 전체 HTML 코드로 대체됩니다.

분명히이 경우 의도 된 동작이 아니므로 Ajax 요청 중에 리디렉션이 어떻게 발생했는지 감지하고 일부 JavaScript를 다시 보내 브라우저에 수동으로 document.location을 설정해야합니다.

가능한 용액 XMLHttpRequest를 검출 할 때 (이것은 답변 스크립트가 브라우저에 독립적 인 실행을 지원하는) Ajax 요청을 배치하고, Location 헤더 대신 스크립트 리디렉션 코드를 전송하기위한 jQuery를 사용이다

자바 스크립트

$("#like-div").load("add_to_favourites.php?" + str); 
/* see how much easier it is with jQuery? */ 

header.php

/* Function for Ajax-friendly redirects */ 
function redirect_with_ajax($url, $permanent = false) 
{ 
    @ob_end_clean(); 
    if(isset($_SERVER["HTTP_X_REQUESTED_WITH"]) && strtolower($_SERVER["HTTP_X_REQUESTED_WITH"]) === "xmlhttprequest") 
    { 
    print('<script> location.href = ' . json_encode($url) . '; </script><div>You are being redirected <a href="' . htmlentities($url, ENT_QUOTES, "UTF-8") . '">here</a>.</div>'); 
    } 
    else 
    { 
    header($_SERVER["SERVER_PROTOCOL"] . " " . 
     ($permanent ? "301 Moved Permanently" : "302 Found")); 
    header("Location: " . $url); 
    } 
    exit; 
} 

/* Do the redirect */ 
redirect_with_ajax("index.php"); 

코드가 테스트되지 않았으며 오류가있을 수 있습니다. 조심해서 사용하십시오.

+0

@ solymosi..i 당신과 동의하지만 서버에서 아약스 요청을 할 때 헤더 기능이 작동하지 않는 이유를 알고 싶습니다. –

+0

몇 가지 추가 설명을 추가했습니다. –

관련 문제