2017-02-22 4 views
1

Я знаю, что этот вопрос задан несколько раз, но я до сих пор не нашел ответа на конкретную проблему, с которой я столкнулся. Я создаю веб-страницу и всякий раз, когда пользователь нажимает на определенную кнопку, я хочу, чтобы страница получала данные из динамически созданной таблицы в php-функции. Поскольку PHP не имеет встроенной функции для этого, по крайней мере, насколько мне известно, я решил использовать Javascript для преобразования данных таблицы в массив am с элементами JSON. Я понял, чтобы сделать это с помощью:Используйте массив Javascript для функции PHP, будь то в том же файле или на другом вместе с другими функциями.

function getTableData(){ 
      var array = []; 
      var headers = []; 
      $('#tablaListado th').each(function(index, item) { 
       headers[index] = $(item).html(); 
      }); 
      $('#tablaListado tr').has('td').each(function() { 
       var arrayItem = {}; 
       $('td', $(this)).each(function(index, item) { 
        arrayItem[headers[index]] = $(item).html(); 
       }); 
       array.push(arrayItem); 
      }); 

      actualizarCostos(array); 
     } 

Я использую эти данные в другой функции, чтобы разобрать его на РНР функции:

function actualizarCostos(array){ 
      if(array.constructor === Array){ 
       for(var i = 0; i < array.length ; i++){ 
        <?php updateCosts(JSON.stringify(array[i]))?> 
       } 
      }else{ 
       alert("Input must be array"); 
      } 
     } 

Я знаю, что выше способ не правильный путь При этом я также немного почитал AJAX. Мой вопрос: есть ли способ, который я могу вызвать функцию в том же файле? Если нет, есть ли более простой способ использовать AJAX в другом PHP-файле, который будет иметь функцию, в которой я нуждаюсь, вместе с другими?

Спасибо всем!

ответ

3

Ответ на вопрос: Нет. Вы не можете использовать переменную из Javascript внутри PHP. Вы можете генерировать действительный код Javascript с PHP, но не наоборот. Причина заключается в том, что PHP обрабатывается на стороне сервера, в то время как Javascript обрабатывается на стороне клиента (браузер)

ПРИМЕЧАНИЕ: Вы можете обрабатывать Javascript на стороне сервера, а также с помощью узла, но вы уже используете PHP. Как использовать javascript на стороне сервера с помощью NodeJs выходит за рамки вопроса.

Теперь вы можете создать эту таблицу с помощью PHP, а не использовать JS вообще. Я предполагаю, что ваши данные находятся в формате массива, поэтому загляните в петли PHP, например, foreach. Затем создайте таблицу путем эха (см. echo('')) теги таблицы (таблица, thead, tbody, td, tr и т. Д.).

+0

Я боялся, что это было :(Ну, если это так, я знаю, что сказал мне известно, не существует способа, PHP может принимать данные HTML таблицы. Неужели я ошибаюсь в этом предположении? –

+0

И, в ответ на ваше редактирование. Мои данные создаются из запроса MySQL, а затем помещаются в таблицу в формате HTML. –

+0

Чтобы создать такую ​​таблицу HTML, вам нужны данные. Узнайте, откуда эти данные поступают (на стороне сервера). Затем вы либо повторно используете эти данные, вызывая методы, которые сгенерировали его, либо запрашивают БД, чтобы вытащить нужные данные. – JorgeObregon

1

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

потому

Javascript (Client side) and PHP (Server Side)

Таким образом, в данном контексте, что вы можете сделать, это следующим образом

Client Side

function actualizarCostos(array){ 
      if(array.constructor === Array){ 
       // Here you need ajax 

       $.post('http://myhost.mydomain.com/update_cost.php', 
        { table_data : array }, function(response){ 
           // do something after getting response 
        }); 
      }else{ 
       alert("Input must be array"); 
      } 
     } 

Server Side (update_cost.php)

<?php 
     function updateCosts($item) 
     { 
      // do something here... 
     } 

     if(isset($_POST['table_data'])) 
     { 
       foreach($_POST['table_data'] as $index => $item) 
       { 
         // do something here 
         updateCosts($item); 
       } 

       // Response back - if needed 
       echo json_encode(array('status'=>true, 'msg'=>'Some Message')); 
     } 
?> 
+0

Спасибо за ваш ответ :) У меня есть один вопрос с этим подходом: если у меня есть больше, чем эта функция, не будет мешать им? –

+0

@JulioGarcia: Извините, я не понял смысла: «Если у меня есть больше, чем эта функция, это не будет мешать им?», Не могли бы вы уточнить –

+0

@AkshayHedge да, конечно.Я буду помещать функцию в файл, который имеет больше функций, таких как 'updateCosts()' 'updateQty()' ... –

Смежные вопросы