2013-12-02 9 views
0

У меня есть сайт, который имеет простой запрос AJAX на странице загрузки:AJAX не ждать ответа

$(document).ready(function() { 
    $.get("ajax.php?do=something", function(response) { 
     alert('response'); 
    }); 
}); 

Этот запрос занимает около 15 секунд на моей локальной тестовой машине. Ajax.php действительно использует session_start(), но вызывает session_write_close() сразу после (почти сразу после - она ​​вызывается перед любой из интенсивной обработки производится):

<?php 
session_start(); 

if(empty($_GET['do'])) 
    die("!Invalid request."); 

$do = $_GET['do']; 

if($do=="something-else") 
{ 
} 
else if($do=="something") 
{ 
    session_write_close(); 

    $customerId = $_SESSION['customerId']; 

    //processing done here 
} 
?> 

Проблема заключается в том, что как только эта страница загружается , AJAX запускается, но если пользователь нажимает на ссылку, чтобы перейти на другую страницу, браузер ждет 15 секунд, а затем перенаправляет.

Я хочу, чтобы пользователь перешел на другие страницы, не дожидаясь, или если они останутся, я хочу, чтобы они увидели ответ.

EDIT Просто уточнить это немного больше. На каждой странице есть session_start() вверху, включая ту, к которой пользователь пытается перейти.

Я использую сессию в ajax.php и отредактировал исходный вопрос, чтобы отразить это.

+1

Исправьте меня, если я ошибаюсь, но если вы отскакиваете от страницы, пока процедура AJAX все еще работает, не будет ли она удалять кеш-кеш и ошибку? – DevlshOne

+0

Используйте функцию успеха вызова ajax http://api.jquery.com/jQuery.ajax/ – Ali

+0

Весь этот сценарий звучит очень странно ... 15 секунд - это вечность, когда дело доходит до ajax, но похоже, t нужно, чтобы пользователь имел данные. Никогда не видели, чтобы пользователь ajax-запроса блокировал доступ к другой странице – charlietfl

ответ

0

Где находится ссылка, на которую нажимают? Где ссылка указывает и как она связана с AJAX, который вы разместили? Из того, что я вижу, AJAX работал так, как ожидалось. Вы ничего не делаете с сеансами, чтобы у вас не было ни начала сеанса, ни закрытия.

Я бы разместил это как комментарий, но это не позволит мне поэтому я даю это как ответ, пока вы не сможете дать более подробную информацию.

+0

Вторая страница не привязана к AJAX вообще. Я просто хочу, чтобы пользователь мог сидеть и ждать завершения ajax или щелкнуть любую другую ссылку на странице и уйти. В настоящее время, если они нажимают на ссылку, она все еще ждет завершения AJAX до того, как браузер перейдет на следующую страницу. – user744621

+0

AJAX завершает работу очень быстро и делает это в фоновом режиме. Вы должны сделать это, как только документ будет загружен, что является нормальным. Он будет работать достаточно быстро, чтобы отображаться так, как если бы он был частью загрузки страницы. Что касается материала сеанса, я замечаю, что вы закрываете сессию, прежде чем вы закончите с ней. Удалите сеанс закрытия. Если у вас установлен Firebug, вы можете наблюдать за вызовами AJAX и получать хорошее представление о том, что происходит, например о кодах состояния и ответах. –

+0

Мое понимание session_write_close() заключается в том, чтобы сказать PHP, что вы закончили запись на сеанс, так что следующий запрос может открыть сеанс, а не ждать. После вызова session_write_close() данные $ _SESSION по-прежнему доступны для чтения. – user744621