Нажатие кнопки запускает скрипт php, который повторяет скрипт javascript - PullRequest
0 голосов
/ 26 мая 2011

Вот конец javascript, который запускается при нажатии кнопки

xmlObj.open ('GET', /ajax.php, true);
xmlObj.send ('');
}

Таким образом, он выполняет скрипт php ajax.php в корневом каталоге:

<?php
echo "<script type='text/javascript'>\n";
echo "var e = document.getElementById('widget_more_');\n";
echo "e.innerHTML += '<p> <a>TEST</a> </p>';\n";
echo "</script>";
?>

Какойэто код JavaScript, который ищет в html-документе элемент по идентификатору и добавляет к нему ссылку TEST.Я запустил этот javascript в HTML как обычно, не пытаясь повторить его через php, и он работает!НО не когда я пытаюсь сделать это через php!Что я делаю не так?

Причина, по которой я делаю это таким образом, заключается в том, что TEST фактически будет строкой из переменной php.

Пожалуйста, сообщите мне.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 26 мая 2011

Лучше было бы:

ajax.php

<?php
$string = 'TEST';
echo $string;
?>

JavaScript

window.onload = function() {
    var e = document.getElementById('widget_more_');
    xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
    xmlhttp.open('GET', '/ajax.php', true);
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            e.innerHTML += '<p><a>' + xmlhttp.responseText + '</a></p>';
        }
    }
    xmlhttp.send(null);
}

Я не очень понимаю, почему вы не можете использовать переменную PHP.

1 голос
/ 27 мая 2011

Нет большой пользы от написания javascript внутри php, обычно это просто приводит к ненужному соединению кода.Тем не менее, на будущее, можно определить javascript из PHP или любого другого серверного языка несколькими способами.

Первый - просто убрать теги script из вашего php и вызвать eval из javascript:

ajax.php

<?php
echo "var e = document.getElementById('widget_more_');\n";
echo "e.innerHTML += '<p> <a>TEST</a> </p>';\n";
?>

Javascript

xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        //For function scope
        eval(xmlhttp.responseText);
        //For global scope
        window.eval(xmlhttp.responseText);
    }
}

Альтернативно "немного" более гибкое решение:

ajax.php

<?php
echo "function showTest(){";
echo "    var e = document.getElementById('widget_more_');\n";
echo "    e.innerHTML += '<p> <a>TEST</a> </p>';\n";
echo "}";
?>

Javascript

xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
        //Now we will dynamically create your script element in the header
        //Get the header element on the page
        var head= document.getElementsByTagName('head')[0];
        //Create the new script tag
        var script= document.createElement('script');
        script.type= 'text/javascript';
        script.innerHTML = xmlhttp.responseText;
        //Append the new script to the header
        head.appendChild(script);
        showTest();
    }
}

Эти примеры предназначены скорее для академических целей, чем для практических (хотя динамическая загрузка javascript имеет свое применение, см. API Google ajax).Оба эти примера все еще оставляют ваш код сильно связанным.Ответ Мидаса - гораздо более правильный способ достижения того, чего вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...