Доступ к JavaScript объектам DOM в PHP - PullRequest
2 голосов
/ 25 июня 2009

У меня есть код JavaScript, помогающий мне динамически создавать строку за строкой в ​​таблице и удалять строку из этой таблицы. В каждом ряду четыре ячейки. например, ячейка 1 содержит текстовую зону. чтобы отличить ячейку 1 от строки 1 с ячейкой 1 от строки 2, я переименую свою ячейку 1 следующим образом cell1.name = cell1.name + '_' + row.rowIndex.

Я создаю кнопку отправки, чтобы я мог читать данные, введенные пользователем в строках таблицы, и пытаюсь напечатать $ _GET. но внутри ничего нет Как я могу получить доступ к моим DOM-объектам в PHP?

Я благодарен за вашу помощь.

мой код HTML + PHP

<body >

<?php
if (isset($_GET['Enter'])){
    print_r($_GET);
}

?>

<h1> Create an Item </h1>
<form method="GET" action="func.html">
    <table align="center" border = "2" cellspacing ="0" cellpadding="3" id="table"> 
        <tr><td><b>Functionality Name:</b></td> <td><b>Description:</b></td> <td><b>Status:</b></td> <td><input type="button" Name= "Ajouter" Value="Ajouter" onclick="go()"></td></tr>

    </table>    
<input type="submit" name="submit" value="Enter">
</form> 
</body>

и мой код Javascript:

<script>

   function getXhr(){
                var xhr = null; 
                if(window.XMLHttpRequest) // Firefox and others
                   xhr = new XMLHttpRequest(); 
                else if(window.ActiveXObject){ // Internet Explorer 
                   try {
                            xhr = new ActiveXObject("Msxml2.XMLHTTP");
                        } catch (e) {
                            xhr = new ActiveXObject("Microsoft.XMLHTTP");
                        }
                }
                else { // XMLHttpRequest not supported by your browser
                   alert(" Your browser does not support XMLHTTPRequest objects..."); 
                   xhr = false; 
                } 
                  return xhr
            }

            /**
            *  method called when the user clicks on the button
            */
            function go(){
                var xhr = getXhr()
                // We defined what we gonna do with the response
                xhr.onreadystatechange = function(){
                    // We do somthing once the server's response is OK
                    if(xhr.readyState == 4 && xhr.status == 200){
                        var body = document.getElementsByTagName("body")[0];

                    // Retrieve <table> ID and create a <tbody> element

                        var tbl = document.getElementById("table");
                        var tblBody = document.createElement("tbody");
                        var row = document.createElement("tr");

                        var cell_1 = document.createElement("td");
                        var cell_2 = document.createElement("td");
                        var cell_3 = document.createElement("td");
                        var cell_4 = document.createElement("td");

                    // Create the first cell which is a text zone   
                        var cell1=document.createElement("input");
                        cell1.type="text";
                        cell1.name="fname";
                        cell1.size="20";
                        cell1.maxlength="50";
                        cell_1.appendChild(cell1);

                    // Create the second cell which is a text area  
                        var cell2=document.createElement("textarea");
                        cell2.name="fdescription";
                        cell2.rows="2";
                        cell2.cols="30";
                        cell_2.appendChild(cell2);

                    // Create the second cell which is a combo box
                        var cell3 = document.createElement("div");
                        cell3.id="rs";
                        cell3.innerHTML=xhr.responseText;
                        cell_3.appendChild(cell3);


                    // Create the fourth cell which is a button
                        var cell4=document.createElement("input");
                        cell4.type="button";
                        cell4.value="Delete"
                        cell4.onclick=delRow;
                        cell_4.appendChild(cell4);

                    // add cells to the row
                        row.appendChild(cell_1);
                        row.appendChild(cell_2);
                        row.appendChild(cell_3);
                        row.appendChild(cell_4);

                    // add the row to the end of the table body
                        tblBody.appendChild(row);

                    // put the <tbody> in the <table>
                        tbl.appendChild(tblBody);

                    //  Rename cells with the row index         
                        var ind=row.rowIndex;
                        var liste_fname = row.getElementsByTagName("input");
                        for(i=0; i < liste_fname.length; i++)
                        {
                           if(liste_fname[i].name == "fname") 
                           {
                              liste_fname[i].name = liste_fname[i].name + "_" + ind; //give fname_1, fname_2, fname_3, ...

                           }
                        }

                        var fd = row.getElementsByTagName("textarea");
                        fd[0].name = fd[0].name + "_" + ind;

                        var cd = row.getElementsByTagName("div");
                        cd[0].id = cd[0].id + "_" + ind;

                        var selectname = row.getElementsByTagName("select");
                        selectname[0].name = selectname[0].name + "_" + ind;

                    // appends <table> into <body>
                        body.appendChild(tbl);

                    // sets the border attribute of tbl to 1;
                        tbl.setAttribute("border", "1");

                        }       
                }

                xhr.open("GET","fstatus.php",true);
                xhr.send(null);
            }
function delRow(){
    var i= this.parentNode.parentNode.rowIndex;
    document.getElementById('table').deleteRow(i);
}
   </script>

С уважением,

Билли

Ответы [ 5 ]

1 голос
/ 01 июля 2009

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

Один из способов сделать это с помощью PHP - выгрузить объект DOM в JSON и затем использовать поддержку PHP JSON. В зависимости от ваших целей, вы можете свернуть свой собственный класс для обработки данных JSON или просто извлечь их из массива, полученного из json_decode (). Другим способом было бы выгрузить объект в его представительный HTML и передать его вашему PHP-сценарию, а не объекту DOM. Затем вы можете проанализировать его, используя Простой HTML DOM Parser , простой в использовании, свободно доступный DOM Parser для PHP.

Конечно, вы должны заметить, что вы добавляете два шага обработки здесь. Если вы можете выполнять необходимую обработку без переключения языков, вы экономите время и немного здравомыслия.

1 голос
/ 25 июня 2009

Поскольку PHP на стороне сервера, а Javascript на стороне клиента, вы не можете напрямую получать доступ к элементам на странице.

Чтобы получить доступ к элементам, вам необходимо отправить обратно на сервер через FORM или какой-нибудь AJAX.

Вы можете воспользоваться jQuery , чтобы помочь вам сделать это, поскольку это упрощает вызов программ PHP и манипулирование DOM.

0 голосов
/ 01 июля 2009

Не могу не подчеркнуть - используйте jQuery. Ваша жизнь будет на порядок проще.

0 голосов
/ 25 июня 2009

имя вашей ячейки не должно называться так ... оно должно быть так

 <input type='text' name='username[]' value=''/>
 <input type='text' name='username[]' value=''/>
 <input type='text' name='username[]' value=''/>
..... 
<input type='submit' name='submit' value='submit'/>

, чтобы вы могли получить доступ из php как массив имени пользователя Например, $ _GET [username] [0] будет отображать первое имя пользователя и т. Д. *

Кстати, попробуйте использовать прототип или jquery (javascript framwork), это значительно упростит вашу жизнь.

для публикации данных с использованием jquery с использованием ajax:

var url = 'your.server.com/post/fstatus.php'; 
var data = $('#myform_id').serialize(); 
$.post(url, data , function(result){ 
 //... if the data was alright or submited ... 
 alert(result); 
},"json"); 

не проще ли? :)

для добавления простого типа:

var newfield="<div id='rs'><textarea name='mytextarea'></div>"; $('#your_target_id').append(newfield);

в вашем типе php

<?php print_r($_GET); ?> 

и вы поймете, что я имею в виду :)

0 голосов
/ 25 июня 2009

Ну ... для начала вы хотите посмотреть, установлено ли значение $ _GET ['submit'], а не $ _GET ['Enter'], потому что $ _GET ['submit'] должно иметь значение 'Enter'.

Кроме того, каждая из ваших текстовых областей должна иметь имя, отличное от остальных, чтобы они не перезаписывали друг друга (или им нужно иметь имя, оканчивающееся на [] (квадратные скобки), и тогда php превратит их в массив).

И после отправки html ... DOM больше не существует, поэтому PHP не может получить к нему доступ, кроме как через ajaxy kinf.

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