2015-03-13 5 views
0

В настоящее время я работаю над таблицей с onclick()<td> элементами, которые отправляют информацию на страницу PHP.

Основная идея состоит в том, что если щелкнуть курс (например, французский, математический, английский, ...), страница PHP получает значение, а затем выполняет код SQL, чтобы дать мне всех преподавателей для этого конкретного курса.

<script> 
    function courseToTutor(id) { 
     var courseClicked = document.getElementById("course" + id).value; 
     $.post('loadDivs/loadTutors.php', {postname: courseClicked}); 
     $('#divTutors').load('loadDivs/loadTutors.php'); 
    } 
</script> 

Когда <td> нажата, он посылает свой идентификатор (сгенерированный в PHP) в качестве параметра. Внутри функции я использую этот параметр, чтобы найти значения в пределах <td> (хранится внутри input type="hidden").

У меня есть один PHP-страница, и получает посланное значение, как это:

if (isset($_POST['postname'])) { 
    $course = $_POST['postname']; 
    $_SESSION['clickedCourse'] = $course; 
    echo $course; 
} 

Другая частью страницы является

else { 
    //generate table with tutors for a specific course (with SQL) 
} 

Это работает около 85% времени. Да, я использую правильно session_start(); s, у меня есть правильное подключение к базе данных и так далее.

Когда я нажимаю <td>, у меня есть предупреждение о loadTutors.php что всегда триггеров, он предупреждает мой $_SESSION['clickedCourse];.

В 85% случаев это предупреждение показывает правильную информацию, остальные 15% времени, она пуста.

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

Заранее спасибо

EDIT Это PHP используется для создания ВСЕЙ таблицы курсов.

<?php 
$counter = 1; 
if (!$res = $link->query($sqlSelectCourses)) { 
    trigger_error('Error in query ' . $link->error); 
} else { 
    while ($row = $res->fetch_assoc()) { 
     ?> 
     <tr> 
      <td onclick="courseToTutor(this.id);" id="<?php echo $counter; ?>"> 
       <?php echo $row["course"]; ?><input type="hidden" value="<?php echo $row["course"]; ?>" id="course<?php echo $counter; ?>"> 
      </td> 
     </tr> 
     <?php 
     $counter+=1; 
    } 
} 
?> 
+0

Можете ли вы предоставить код тела ajax? – hamed

+0

Можете ли вы разместить свой html? –

+0

Является ли ваша сессия умирающей в точке, где она пытается установить переменную сеанса? Может ли 15% времени не быть там, где вы havent сделали значительный вызов более чем за 24 минуты? – JammyDodger231

ответ

1
$.post('loadDivs/loadTutors.php', {postname: courseClicked}); 
$('#divTutors').load('loadDivs/loadTutors.php'); 

Вы отправляете два запроса, один для передачи данных и один для получения новых данных. Это может Быть, что второй запрос сначала достигает сервера, и я думаю, что это то, что происходит на 15% времени (следовательно, неправильный результат). То, что вы должны сделать, вместо того, чтобы использовать первый запрос и использовать свой ответ:

$.post('loadDivs/loadTutors.php', {postname: courseClicked}, function(response){ 
    $('#divTutors').html(response); 
}); 

Edit: Если вы не можете установить PHP-скрипт, так он посылает свой новый контент непосредственно на «Click-запросе », используйте это вместо:

$.post('loadDivs/loadTutors.php', {postname: courseClicked}, function(){ 
    $('#divTutors').load('loadDivs/loadTutors.php'); 
}); 

Это будет ждать завершения первого запроса, прежде чем он начнет второй.

+0

Может быть просто асинхронным вызовом независимо от порядка. Но это, кажется, проблема. –

+0

Ваш код заменяет «репетитор» div нажатым курсом, а не другим кодом на странице php. Будет ли 'setInterval' работать? –

+0

Нет, это плохо. Либо перепишите свой PHP-скрипт, чтобы он отправил ваш «новый контент» сразу после обновления или замены строки в моем обработчике ответа с помощью вашего второго ajax-вызова – tkausl