2014-11-20 2 views
0

Вчера я опубликовал более конкретный вопрос, но я думаю, что моя проблема более простая, чем то, что я изначально задавал.Как использовать PHP для отправки javascript

Я пытаюсь использовать PHP для установки setTimeout() с переменной wait из базы данных, но любой скрипт I echo не работает, даже если он не связан с манипуляциями с PHP. Взгляните ниже.

Вот Аякса позвонить

function loadContent() 
{ 
    $.ajax(
    { 
     url: "controller/loadContent.php", 
     cache: false, 
     success: function(html) 
     { 
      $("#contentWindow").html(html); 
     } 
    }); 
} 
// Initial Load 
loadContent(); 

А вот PHP он получает.

 echo '<h1>Upload content to start the show</h1>'; 

     echo '<script> 
     setTimeout(loadContent, 4000); 
     </script>'; 

Отображается, поэтому я считаю, что ajax и PHP работают правильно. Сценарий работает правильно, когда я помещаю его в файл javascript, но сценарий не будет запускаться, когда он будет отображаться на странице.

Моя проблема заключается в том, что я эхо не работает. Как я могу использовать PHP для отправки javascript пользователю? Почему то, что я написал, не работает?

ОБНОВЛЕНИЕ: Я понял, что, когда я эхо-скрипт, он эхом отозвался до середины тела и технически выше, где файл сценария загружен в нижней части тела. Могу ли я эхо на дно тела?

+0

Не очень понятно, что это ваша проблема, но есть разница между '.text (someCode)' и '.html (someCode)'. Вы должны оценить код для его запуска (первый не будет оцениваться, а второй - оценить) – Justinas

+0

Моя проблема в том, что javascript I echo в PHP не работает. Я предполагаю, что вы имеете в виду успех. .html (html). Должен ли я видеть, работает ли использование .text (html)? – Goose

+0

Почему вы не используете setTimeout в своем javascript? – vaso123

ответ

2

Вот обходной путь:

function loadContent() 
{ 
$.ajax(
{ 
    url: "controller/loadContent.php", 
    cache: false, 
    success: function(html) 
    { 
     var myArray = html.split("|"); 
     var message = myArray[0]; 
     var counter = parseInt(myArray[1]); //Minor fix 
     $("#contentWindow").html(message); 
     startCounter(counter); 
    } 
}); 
} 

function startCounter(counter){ 
    //counter as the value of 1000 milliseconds are equal to 1 second 
    setTimeout(loadContent, counter); 
} 

PHP File

$refreshTimer = 1000; //This is a test 
echo "Upload content to start the show|".$refreshTimer; //The message and the counter 
+0

Кажется, что работает. Я продолжу внедрять и тестировать его и сообщим вам. Можете ли вы объяснить, что я делаю неправильно, и почему это работает? – Goose

+0

Я использую | вместо/для разделения, поэтому я могу использовать теги в своем HTML. Я рекомендую изменить это в своем HTML. – Goose

+0

Когда вы возвращаете строку с кодом javascript из php через ajax, вам нужно оценить этот код на клиенте, чтобы заставить его работать, но использование 'eval' считается плохой практикой, поэтому это лучше обходной путь, чем использование 'eval' – Hackerman

0

Если вы возвращаете только часть сценария в файле PHP вы можете установить тип данных в вызове .ajax на 'script', и он выполнит возвращенный javascript (http://api.jquery.com/jquery.ajax/)

Итак:

function loadContent() 
{ 
    $.ajax(
    { 
     url: "controller/loadContent.php", 
     cache: false, 
     dataType: 'script', 
     success: function(html) 
     { 
      $("#contentWindow").html(html); 
     } 
    }); 
} 

// Начальная загрузка LoadContent();

Затем в PHP:

echo 'setTimeout(loadContent, 4000);'; 
+0

Я пробовал этот код, и он никогда не загружал контент. Остальная часть javascript на странице работала, поэтому она действительна javascript. Не уверен, почему он не загружал $ contentWindow. Дайте мне знать, можете ли вы исправить это, потому что ваше решение кажется намного более прямым и сухим. – Goose

+0

После игры с ним кажется dataType: 'script', вызывает проблемы. – Goose

+0

Попробуйте удалить тег