2013-09-12 4 views
0

У меня есть простой проект для кодирования. На домашней странице есть несколько изображений. на заднем плане я запрашиваю файл под названием «check.php» каждые 5 секунд с помощью Ajax. И в check.php некоторые данные извлекаются из базы данных, и если данные равны 0, я хочу перенаправить весь сайт на «example.php», но если данные равны 1, я просто хочу обновить div ответа ajax текстом называемый «без изменений».Как перенаправить страницу на "example.php"?

Проблема: Всякий раз, когда я пытаюсь сделать это не перенаправление «example.php», а он показывает example.php в АЯКСЕ DIV ответа. Я использую header ("Location: example.php"); для этого.

Мои коды:

//function auto for ct fetch starts 

function reload_ct() { 



var xmlhttp; 

if (window.XMLHttpRequest) 
    { 
    xmlhttp=new XMLHttpRequest(); 
    } 

xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    document.getElementById("ct").innerHTML=xmlhttp.responseText; 
    } 
    } 
    var c_user = document.getElementById('c_name').value; 
    xmlhttp.open("GET","check.php?cu=" + c_user,true); 
xmlhttp.send(); 
} 
window.setInterval(reload_ct, 100); 
//function auto for ct fetch ends 
+4

вам нужно проверить ответ ajax и изменить window.location.href – DevZer0

+1

, разместите свой код. –

+0

Я вижу, что вы устанавливаете интервал на 100 мс. Если латентность пользователя медленнее, чем вы можете начать выполнять запросы стека. Я бы рекомендовал использовать 'setTimeout' и устанавливать новый таймаут каждый раз, когда возвращается ответ AJAX. Таким образом, за один раз будет ожидаться только один запрос. – Jasper

ответ

2

Это должно работать (в JQuery):

$.post('check.php',{'c_user':c_user}) 
$.done(function(data) { 

if(data == '0'){ 
window.location.href = "example.php"; 
} 

}); 

Общий формат является

$.post('URL_SENDING_TO',function (data returned from request) { 

dosomething(); 

}); 

Если вы хотите отправить данные, вы можете использовать .done, например:

$.post('URL_SENDING_TO',{'datatosend':'value1','datatosend2':'value2'}) 
.done(function (data returned from request) { 

dosomething(); 

}); 

Из, если вы хотите сделать это без JQuery, это должно работать (ссылка http://www.w3schools.com/ajax/ajax_xmlhttprequest_send.asp и http://www.w3schools.com/ajax/tryit.asp?filename=tryajax_database):

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) { 
     if (xmlhttp.responseText == '0') { 
      window.location.href = "example.php"; 
     } 
    } 
} 

var time_five_sec = setInterval(
    function() { 
     xmlhttp.open("POST", "check.php", true); 
     xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
     xmlhttp.send("c_user=" + c_user); 
    }, 5000); 

Если вы хотите изменить последнюю функцию к SetTimeout (в соответствии с рекомендациями Jasper), можно было бы написать:

function timed_ajax_request() { 
    setTimeout(function() { ajaxrequest() }, 5000); 
} 

function ajaxrequest() { 
    xmlhttp.open("POST", "check.php", true); 
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    xmlhttp.send("c_user=" + c_user); 
    timed_ajax_request(); 
} 
timed_ajax_request(); 

Это будет посылать его в петлю, где она называется функцией timed_ajax_request первого, а затем, когда запрос Ajax отправляется, он под названием timed_ajax_request снова, так как это Timeout, он будет ждать 5000 мс (или 5 секунд) перед вызовом запроса.

Если вы хотите, чтобы пользователь GET вместо POST, изменения линии:

xmlhttp.open("POST", "check.php", true); 
    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    xmlhttp.send("c_user=" + c_user); 

к:

xmlhttp.open("GET", "check.php?c_user=" + c_user, true); 
    xmlhttp.send("c_user=" + c_user); 

И это должно работать так же. То же самое относится и к JQuery, изменить его с:

$.post('check.php',{'c_user':c_user}) 
$.done(function(data) { 

if(data == '0'){ 
window.location.href = "example.php"; 
} 

}); 

к:

$.get('check.php',{'c_user':c_user}) 
$.done(function(data) { 

if(data == '0'){ 
window.location.href = "example.php"; 
} 

}); 

Итак, в заключение, чтобы делать то, что вы хотели бы сделать в вашем вопросе, в том числе рекомендации Джаспера, можно было бы написать :

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) { 
     if (xmlhttp.responseText == '0') { 
      window.location.href = "example.php"; 
     } 
    } 
} 

function timed_ajax_request() { 
    setTimeout(function() { ajaxrequest() }, 5000); 
} 

function ajaxrequest() { 
    xmlhttp.open("GET", "check.php?cu=" + c_user, true); 
    xmlhttp.send(); 
    timed_ajax_request(); 
} 
timed_ajax_request(); 
+0

. OP не предполагает, чтобы использовать jQuery. – Jasper

+0

Я вижу, позвольте мне посмотреть, могу ли я написать его в JavaScript – JVE999

+0

Я новичок в jquery и ajax, поэтому я не получаю намного больше. Поэтому, пожалуйста, отредактируйте мой выше код и напишите ему, как это должно быть, и я должен отправить переменную c_user на check.php, которая показана выше в моем коде. Пожалуйста, помогите мне. – Webmasterpsb

2

Я бы передать перенаправлять COMAND с файлом PHP AJAX обратно в исходный файл

return ("go to example.php");

А затем в исходном файле вы берете эти данные и отправляете JS-перенаправление, если его = "перейти к example.php".

Смежные вопросы