2017-02-02 3 views
0

У меня есть две страницы. На первой странице, называемой test1.html, я пытаюсь восстановить часовой пояс пользователей. Я хотел бы отправить его на php-страницу с именем test2.php и загрузить эту страницу вместо test1 с переменной (часовой пояс). Это код. test1.html:Передать переменную с jquery, открыть страницу php и забрать ее

<script type="text/javascript"> 

$(document).ready(function() { 
    var tz = jstz.determine(); // Determines the time zone of the browser client 
    var timezone = tz.name(); //'Asia/Kolhata' for Indian Time. 

$.ajax({ 
     type: 'POST', 
     url: 'test2.php', 
     data: {'timezone': timezone}, 
     cache: false, 
     success: function(){ 
       setTimeout(function() { 
         window.location = 'test2.php'; 
       }, 3000);//this will redirct to somefile.php after 3 seconds 
     } 
    }); 
}); 
</script> 

Test2.php

<?php 

if(isset($_POST['timezone'])) 
{ 

     $tz = $_POST['timezone']; 
     echo "Timezone is " .$tz; 
} 
else { 
     echo "Fail!"; 
} 

?> 

На PageLoad из test2.php, я только когда-нибудь 'не получится!' сообщение. Часть jquery и php корректно работают, когда я тестировал ее с помощью вызова alert в файле test1.html для регистрации ответа с php-страницы. Он дал ответ, которого я ожидал.

Я думаю, что теряю свою переменную, когда код выполняется для перезагрузки test2.php в том же окне. Я просто не знаю, как обойти эту проблему. Я хочу использовать POST, а не GET, если это возможно.

Любая помощь очень ценится.

Маленькая заметка: Идеализм Я хочу использовать этот javascript и php для того, чтобы быть на одной странице, но «проблема» заключается в том, что php, конечно же, выполняет серверный сервер, а затем он запускает клиентскую часть je js впоследствии ...

+0

Вы посылаете запрос, то при переходе на новую страницу - так переменных POST не будет. Однако вы можете попробовать с сеансом. – Qirel

+0

Думал, что это может быть проблемой, и выясняется, что это проблема ... –

ответ

1

Альтернативное решение, которое до сих пор позволяет использовать POST, который, по вашему мнению, вам нужен, заключается в том, чтобы хранить информацию в переменной сеанса. Сессия - это объект, который может использоваться для хранения значений между запросами. См http://php.net/manual/en/book.session.php

test1.html:

<script type="text/javascript"> 

$(document).ready(function() { 
    var tz = jstz.determine(); // Determines the time zone of the browser client 
    var timezone = tz.name(); //'Asia/Kolhata' for Indian Time. 

$.ajax({ 
     type: 'POST', 
     url: 'test2.php', 
     data: {'timezone': timezone}, 
     cache: false, 
     success: function(){ 
       setTimeout(function() { 
         window.location = 'test3.php'; 
       }, 3000);   } 
    }); 
}); 
</script> 

Test2.php

<?php 
// Start your session (if not already started) 
if (session_status() == PHP_SESSION_NONE) { 
    session_start(); 
} 

// Store posted timezone in the session, which will be available in future calls 
if(isset($_POST['timezone'])) { 
    $_SESSION['timezone'] = $_POST['timezone']; 
} 
else { 
    echo "Fail!"; 
} 

?> 

Test3.php

<?php 
// Start your session (if not already started) 
if (session_status() == PHP_SESSION_NONE) { 
    session_start(); 
} 
if(isset($_SESSION['timezone']) { 
    echo "Your timezone is " . $_SESSION['timezone']; 
} else { 
    echo "Fail!"; 
} 
+0

Спасибо за ваш ответ. Я не знаком с $ _session jet, но, тем не менее, помимо моего списка, он должен быть выполнен так же, как и для входа в систему. Хорошее время, чтобы начать читать вещи, я думаю. –

0

Вы неправильно понимаете, как ваш клиент и сервер взаимодействуют друг с другом. Ваш код отправляет запрос POST на test2.php, а THEN (в обратном вызове успеха, который запускается, когда ваш запрос завершен), он перенаправляет на test2.php. При первом запуске test2.php он получает переменную POST в часовом поясе, но второй раз это не так. Вы можете увидеть это, посмотрев сетевой трафик в инструментах разработчика вашего браузера - вы увидите два запроса на test2.php. Первый вернет «Часовой пояс ...», а второй (который показывает ваш браузер) говорит «Fail!».

Существуют различные способы, чтобы получить то, что вы хотите, но проще было бы пропустить AJAX вообще и просто отправить часовой пояс вместе с перенаправлением:

$(document).ready(function() { 
    var tz = jstz.determine(); // Determines the time zone of the browser client 
    var timezone = tz.name(); //'Asia/Kolhata' for Indian Time. 

    // This redirects to test2.php while setting a GET parameter called "timezone" 
    window.location = 'test2.php?timezone='+encodeURIComponent(timezone); 
}); 

<?php 

if(isset($_GET['timezone'])) 
{ 

     $tz = $_GET['timezone']; 
     echo "Timezone is " .$tz; 
} 
else { 
     echo "Fail!"; 
} 

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