2016-11-26 7 views
0

Обновление: проблема исправлена! Вы можете взять JavaScript из цикла и передать параметр к нему, посмотрите на комментарии, чтобы увидеть полный soultions (: спасибоОбновление сообщений Live - Javascript не загружен даже из-за его [HTML + PHP + Javascript]

Я пытался держать его коротким, как я мог, кроме как от этого! ! линия его все важно :)

Это, как работает мой цикл:

1) Я использую время цикла на всех сообщений найдено (работ)

2) Затем Im вставляя данные сообщения в шаблон html внутри цикла while.

3) Затем я даю каждое сообщение функцию OnClick со специальным идентификатором ..

Херес часть странно, все отлично работает, после обновления ..

позвольте мне показать вам исходные коды перед тем поясню точную проблему:

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

<?php 
    while($inbox = mysql_fetch_array($sqlinbox)) 
     { 

     $pm_id = $inbox['id']; 
     $sender = $inbox['sender']; 
     $subject = $inbox['subject']; 
     $message = $inbox['message']; 

     ?> 

Теперь это, Что Происходило внутри цикла,

Сначала я произвожу сам Сообщ:

    <li> 
        <a href="javascript:;" onclick="loadmsg<?php echo $pm_id; ?>()"> 
         <center> 
         <div> 
         <strong> 
          <span class=" label label-danger"> 
          <?php echo $sender; ?> 
          </span> 
         </strong> 
         </div> 
         </center> 
         <div style="width:80%; text-align:center; margin:auto;"><?php echo $message; ?></div> 
        </a> 
        </li> 

А затем сгенерировать простой яваскрипт функции для загрузки, что сообще внутри DIV ... Я знаю большую тему много возможностей, но проблема очень проста, но я не знаю, пожалуйста, помогите продолжить .. это сценарий:

<?php 
         echo ' 
         <script> 
         function loadmsg' . $pm_id . '() { 
         var xhttp = new XMLHttpRequest(); 
         xhttp.onreadystatechange = function() { 
         if (this.readyState == 4 && this.status == 200) { 
         document.getElementById("page-wrapper").innerHTML = 
         this.responseText; 
         } 
         }; 
         xhttp.open("GET", "/LinkMonster/viewmsg.php?msg_id=' . $pm_id . '", true); 
         xhttp.send(); 
         } 
         </script> 
         '; 
?> 

И конечно же позволяет закрыть время цикла ..:

<?php 
} 
?> 

Так поясню, что выводит, что:

    <li> 
        <a href="javascript:;" onclick="loadmsg16()"> 
         <center> 
         <div> 
         <strong> 
          <span class=" label label-danger"> 
          [email protected]        </span> 
         </strong> 
         </div> 
         </center> 
         <div style="width:80%; text-align:center; margin:auto;">lllllllllll</div> 
        </a> 
        </li> 
<script> 
function loadmsg16() { 
var xhttp = new XMLHttpRequest(); 
xhttp.onreadystatechange = function() { 
if (this.readyState == 4 && this.status == 200) { 
document.getElementById("page-wrapper").innerHTML = 
this.responseText; 
} 
}; 
xhttp.open("GET", "/LinkMonster/viewmsg.php?msg_id=16", true); 
xhttp.send(); 
} 
</script> 

Bigger example (more then 1 msg) - Pastebin.com

Теперь все это работает, когда я получаю новый msg и обновляю страницу, скрипты генерируются, как ожидалось, и когда я нажмите msg, он изменит div с именем «page-wrapper» на страницу с сообщением msg (/LinkMonster/viewmsg.php?msg_id = 16)

Но, всегда, но я хотел вывести вещи на новый уровень и обновить сообщения вживую без обновления самой страницы, так как я получаю сообщение, оно просто появляется там, где нужно, так что я сделал это:

<div id="inboxmsgs"> 
        <?php 
include("./UpdateMsgs.php"); 
    ?> 
        </div> 
        <script> 
        function updateMSGS() 
        { 
        var xhttp = new XMLHttpRequest(); 
        xhttp.onreadystatechange = function() { 
        if (this.readyState == 4 && this.status == 200) { 
        document.getElementById("inboxmsgs").innerHTML = 
        this.responseText; 
        } 
        }; 
        xhttp.open("GET", "/LinkMonster/UpdateMsgs.php", true); 
        xhttp.send(); 
        } 
        setInterval("updateMSGS()",1000); //call updateRow() function every 1 seconds. 
        </script> 

так basiclly я беру этот Div с именем «inboxmsgs» и я использую включить, чтобы загрузить сообща впервые в этот DIV, то я использую ту же яваскрипт функцию с setIntreval из каждую секунду, чтобы загрузить сообщения снова и снова

Это работает как Что ж! Я отправляю себе сообщение, и он появляется без каких-либо проблем, вживую, без обновления ...

Итак, если все работает, почему я здесь?

Функции javascript, которые загружаются после того, как каждое сообщение действительно не загружается на страницу, только в html, не поймите меня неправильно, они порождаются там, где они должны, и у них также есть правильные значения, просто хром говорит, что он не может найти функцию даже благодаря ее там! и если я обновляю страницу, она просто найдет функцию, как будто мне нужно сказать хроме, чтобы запросить эту функцию или что-то в этом роде. Это для вас какое-то значение? пожалуйста, не стесняйтесь задавать любые вопросы и даже полную систему для тех, кто просто этого хочет (:

Просто, чтобы убедиться, что вы меня поняли: Допустим, у меня есть 3 msgs во входящих, если я нажимаю на них, все работает и он показывает страницы сообщений правильно, но затем я получаю новый msg, msg отображается правильно, javascript также загружается правильно, я все еще могу щелкнуть все 3 сообщения, которые у меня уже были, но если я нажму новый msg (num4), хром говорит, что я не смог найти эту функцию [ex: loadmsg16()], если я отправлю еще один msg, я все же могу получить доступ ко всем 3 msgs, которые у меня уже были, но теперь есть 2 дополнительных сообщения, которые я не могу нажать, потому что их функции не загружены , теперь в этот момент, если я обновляю страницу, все 5 сообщений можно полностью щелкнуть!

Полный исходный код:

      <?php 
    while($inbox = mysql_fetch_array($sqlinbox)) 
     { 
     $pm_id = $inbox['id']; 
     $sender = $inbox['sender']; 
     $subject = $inbox['subject']; 
    $message = $inbox['message']; 

     ?> 
        <li> 
        <a href="javascript:;" onclick="loadmsg<?php echo $pm_id; ?>()"> 
         <center> 
         <div> 
         <strong> 
          <span class=" label label-danger"> 
          <?php echo $sender; ?> 
          </span> 
         </strong> 
         </div> 
         </center> 
         <div style="width:80%; text-align:center; margin:auto;"><?php echo $message; ?></div> 
        </a> 
        </li> 

        <li class="divider"></li> 
         <?php 
         echo ' 
         <script> 
         function loadmsg' . $pm_id . '() { 
         var xhttp = new XMLHttpRequest(); 
         xhttp.onreadystatechange = function() { 
         if (this.readyState == 4 && this.status == 200) { 
         document.getElementById("page-wrapper").innerHTML = 
         this.responseText; 
         } 
         }; 
         xhttp.open("GET", "/LinkMonster/viewmsg.php?msg_id=' . $pm_id . '", true); 
         xhttp.send(); 
         } 
         </script> 
         '; 
     } 
    ?> 
+0

почему, я имею в виду, ПОЧЕМУ вы создаете различные функции делают то же самое для каждого сообщения? – phobia82

+0

Это будет намного проще, чище и будет работать сразу, если вы просто измените 'loadmsg () 'to' loadmsg () '. Примечание. Я передаю идентификатор в качестве параметра вместо части имени функции. Затем запустите свою функцию за пределы цикла, объявите ее только один раз как «loadmsg (id)» и используйте идентификатор внутри функции по мере необходимости. – phobia82

+0

внутри функции loadmsg (id), как я могу вызвать идентификатор внутри этой строки? xhttp.open ("GET", "/LinkMonster/viewmsg.php?msg_id= '. $ Pm_id.'", True); Я пробовал. Я бы . а также . $ id. оба не возвращают правильный идентификатор:/ –

ответ

0

Это будет намного проще, чище и будет возможно работать сразу же, если вы просто изменить loadmsg<?php echo $pm_id; ?>() к loadmsg(<?php echo $pm_id; ?>). Примечание. Я передаю id в качестве параметра вместо части имени функции. Затем возьмите вашу функцию вне цикла, объявить его только один раз, как loadmsg(id) и использовать идентификатор внутри функции, как

xhttp.open("GET", "/LinkMonster/viewmsg.php?msg_id="+id, true);