Добавить элемент (выполнение php) с помощью js
Привет, есть такой вопрос - помогите, а то своих знаний не хватает.
1. Есть html/php страничка с таким кодом <head> <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" /> <script type="text/javascript"> function onChange_(_this) { document.getElementById('my').innerHTML = "ok"; } </script> </head> <body> <?php echo"<script src='copy.js' type='text/javascript'></script>"; function my(){ $test = '<div id="my" name="my">'; $test .= 'hello world'; $test .= '<br>'; $test .= '<input type="button" value="Go" onClick="onChange_(this)"/>'; $test .= '</div>'; return $test; } ?> <?php echo my(); ?> <br> <input type="button" value="Add" onmouseup="addField()" /> </body> и внешний скрипт function addField() { var div = document.createElement("div"); div.innerHTML = "<div id=\"new\" name=\"new\"> new </div>\n"; // - работает // div.innerHTML = "<?php echo my(); ?>"; //-не работает document.getElementById("my").appendChild(div); return false; } подскажите как сделать так, чтобы после добавления элемента в DOM отрабатывал скрипт php сори если не в ту ветку, просто пока еще не совсем все понимаю |
Если честно - прочитал сначала вопрос и пару строк кода... Пара советов: обрамляйте при вставке на форум код спец тэгами и прочитайте книгу "PHP 5 В Подлиннике"
|
php выполняется только на сервере, javascript - только у пользователя. Чтобы выполнить какие-то действия на php для данной страницы - нужно отправить ajax запрос на сервер, а полученный ответ уже применять по назначению.
|
ок, сделал через ajax вот так
my.php
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<script type="text/javascript">
function loadXMLDoc(method,url){
if(window.XMLHttpRequest){
req = new XMLHttpRequest();
req.onreadystatechange = processReqChange;
req.open(method, url, true);
req.send(null);
}else if(window.ActiveXObject){
req = new ActiveXObject("Microsoft.XMLHTTP");
req.onreadystatechange = processReqChange;
req.open(method, url, true);
req.send();
}
}
function processReqChange(){
if(req.readyState == 4){
if(req.status == 200){
getMy(req.responseText);
}else{
alert("There was a problem retrieving the XML data:n" + req.statusText);
}
}
}
function onChange_old(_this) {
document.getElementById('my').innerHTML = "ok";
}
function onChange_(_this) {
var url = "ajax.php?my="+_this.value;
loadXMLDoc("get",url);
}
function getMy(data){
var div = document.createElement("div");
div.innerHTML = data;
document.getElementById('my').appendChild(div);
}
</script>
</head>
<body>
<?php
echo"<script src='copy.js' type='text/javascript'></script>";
function my(){
$test = '<div id="my" name="my">';
$test .= 'hello world';
$test .= '<br>';
$test .= '<input type="button" value="Go" onClick="onChange_(this)"/>';
$test .= '</div>';
return $test;
}
?>
<?php
echo my();
?>
<br>
<input type="button" value="Add" onmouseup="addField()" />
</body>
вот ajax.php
<?PHP
header('Content-Type: text/html; charset=windows-1251');
$request = $_GET["my"];
if($request){
echo loadData($request);
}
function getMy($request) {
$tmp = " - ok -";
return $tmp;
}
function loadData($request){
$result = getMy($request);
if($result) return $result = $result;
}
?>
и скрипт добавления
function addField() {
var div = document.createElement("div");
div.innerHTML = "<div id=\"new\" name=\"new\"> new </div>\n"; // - работает
// div.innerHTML = "<?php echo my(); ?>"; // -не работает
document.getElementById("my").appendChild(div);
return false;
}
Что я хочу получить и никак не могу/ не понимаю Нужно чтобы после нажатия кнопки Add в текущую страничку добалялась функция php <?php echo my(); ?> и исполялась. Т.е. после одного нажатия должно получится hello world + кнопка Go hello world + кнопка Go Как сделать такое ? я не силен в php и JS и документация тут не сильно помогает - так что подскажите если знаете |
напиши подробней что должно происходить на странице, я тебе может напишу краткий код на jquery. Просто вообще не понятно что значит php скрипт вставить на страницу. php все делает у себя на сервере и функции и скрипты(если вообще такое понятие для него применимо :) ),а пользователю лишь шлет в основном html код или js скрипты которые браузер обрабатывает.
|
да и еще одно, может у тебя проблема в самой функции. Она у тебя тупо возвращает значение вникуда, если она просто запускается, т.к. return $test; подразумевает, что с этим тестом потом ты будешь что-то делать дальше на сервере с помощью php. если же ты просто хочешь чтобы сервер запустил эту функцию и значение переменной тест вывелось у пользователя на экран, то делай - echo test;
|
даже не знаю как еще объяснить...
сейчас если запустить my.php видно hello world кнопочка Go - принажатии на кнопку выполняется ajax, который выводит просто - ok -, (но может вывести что угодно, код html например) Все это создается с помощью функции my() теперь нужно при нажатии на кнопочку Add в эту же страницу добавить ещё раз функцию my() Т.е.получает уже второй раз hello world кнопочка Go - принажатии на кнопку выполняется ajax, который выводит просто - ok -, (но может вывести что угодно, код html например) |
Ок. понял процентов 30 :) объясню что знаю, а там сам допишешь что надо
В начале ставишь себе библиотеку jquery чтобы не заморачиваться сильно с js. Берешь ее тут http://jquery.com/ последнюю версию. my.php
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<script src="jquery-1.7.1.js" type="text/javascript"></script> //подрубаешь библиотеку что только что скачал.
<script> //тут пишешь js код или подрубаешь файл где он хранится.
$(document).ready(function() { // особо не заморачивайся зачем это, просто все будет работать когда документ загружен полностью.
$(document).on('click', '.btn_go',send_ajax); //устанавливаем обработчик события для кнопки go. $(document).on - устанавливает обработчик. 'click' - действие которое произошло с элементом. В данном случаи клик, там может быть и пук и т.д. '.btn_go' - собственно для какого элемента установлен этот обработчик события. В твоем случаи все элементы имеющие класс - btn_go(все кнопки Go). send_ajax - название функции придуманное от балды, в общем функция будет вызваться когда произошло событие(у нас - клик на элемент с классом btn_go);
function send_ajax(){ //функция которая будет отправлять запрос на сервер и обрабатывать полученный результат.
$.ajax({
type: 'POST', //метод отправки запроса на сервер, пусть POST пофиг
url: 'ajax_my.php', //собственно как файл на сервере будет исполнен. в общем файл где есть функция my();
data:{},//данные которые будут на сервер передаваться, в нашем случаи никаких, если нужно выполнить тупо еще раз функцию my без параметров.
success: function(data){//собственно тут и надо разруливать данные присланные с сервера. функция будет вызываться при успешном ответе сервера. У ней есть параметр - data. В общем это те данные что пришли с сервера. В нашем случаи пришел хтмл код типа ((<div id="my" name="my">hello world<input type="button" value="Go" onClick="onChange_(this)"/></div>)). осталось только вставить его в нужно место на странице и все. я пустой блок с id="inner_block", в него и засунем то что пришло с сервера.
$('#inner_block').append(data) // $('#inner_block') - находит на странице элемент с id=inner_block. append(data) - в конец этого элемента дописывает нашу data(данные пришедшие с сервера)
}
});
}
});
</script>
</head>
<body>
function my(){
$test = '<div id="my" name="my">';
$test .= 'hello world';
$test .= '<br>';
$test .= '<input class="btn_go" type="button" value="Go" >'; //обзываем кнопку как btn_go чтобы привязать к нему обработчик события(когда кнопка будет нажата)
$test .= '</div>';
return $test;
}
<?php
echo my();
?>
<div id="inner_block"></div> - сюда будем вставлять пришедшие с серва данные.
</body>
Вот код для ajax_my.php тут все очень просто
<?php
function my(){
$test = '<div id="my" name="my">';
$test .= 'hello world';
$test .= '<br>';
$test .= '<input class="btn_go" type="button" value="Go" >';
$test .= '</div>';
return $test;
}
echo my();
?>
Вопрос лишь в том куда ты хочешь вставлять присланные данные в этот элемент, заменить элемент и т.д. тебе в помощь к append есть еще prepend(), html() - все jquery методы. |
ага все спасибо, сам разобрался старым методом
jquery - проще конечно, с ним так же сделал как хотелось |
>выполнение php с помощью js
>В начале ставишь себе библиотеку jquery чтобы не заморачиваться сильно с js ![]() |
| Часовой пояс GMT +3, время: 11:34. |