Вызов функции PHP в jQuery (var) - PullRequest
3 голосов
/ 01 июня 2010

У меня небольшая проблема, которую я не могу решить самостоятельно.

У меня есть эта функция PHP:

function intervalo_manha(){
    $que="select id_intervalo,data_15
          from intervalo_manha
          order by id_intervalo";
        $re=mysql_query($que);
        $object.="<select>";
        $object.="<option></option>";
    while(list($id_intervalo, $data_15)=mysql_fetch_row($re))
    {
       $object.= "<option value=\"".$id_intervalo."\">".$data_15."</option>"; 
    }
        $object.="</select>";
return $object;
}

Эта функция возвращает выбор с информацией из базы данных.

У меня также есть эта функция js:

$(document).ready(function() {
              var destTable = $("#dataTable");
              $("#btnAdd").click(function() {
               var newRow = $("<tr style='margin-left:-60px'><td><INPUT type='checkbox' name='chk'/></td><td><INPUT type='text' name='txt[]' id='txt'/></td><td></td></tr>");
               $("#dataTable").append(newRow);
                newRow.find('input').autocomplete("get_cols_name.php", {
                    width: 260,
                    matchContains: true,
                    selectFirst: false
                    });
                });
            });

Этот добавит новую строку в мою таблицу, и для каждого нового ввода будет «активировать» автозаполнение. Вместо этого я хочу:

var newRow = $("<tr style='margin-left:-60px'><td><INPUT type='checkbox' name='chk'/></td><td><INPUT type='text' name='txt[]' id='txt'/></td><td></td></tr>");

Я бы хотел что-то вроде этого:

var newRow = $("<tr style='margin-left:-60px'><td><INPUT type='checkbox' name='chk'/></td><td><INPUT type='text' name='txt[]' id='txt'/></td><td><?php echo intervalo_manha(); ?></td></tr>");

Вызов функции php напрямую не вернет ничего, и я ничего не могу сделать. Есть ли способ сделать это?

Спасибо

Ответы [ 6 ]

1 голос
/ 01 июня 2010

Может быть, будет лучше использовать функции AJAX. Дайте ему имя. Вызовите php-скрипт и получите данные из вывода.

$.ajax(/*...*/);

1 голос
/ 01 июня 2010

Попробуйте этот код: (Пожалуйста, добавьте HTML-тег для завершения страницы, я не могу добавить его здесь)

<?php 

function intervalo_manha () { вернуть 'вот мои данные';

$que="select id_intervalo,data_15
      from intervalo_manha
      order by id_intervalo";
    $re=mysql_query($que);
    $object.="<select>";
    $object.="<option></option>";
while(list($id_intervalo, $data_15)=mysql_fetch_row($re))
{
   $object.= "<option value=\"".$id_intervalo."\">".$data_15."</option>"; 
}
    $object.="</select>";

return $ object; }

if ($ _ GET ['get_data']) { echo intervalo_manha (); выход; }

?>

<head>
    <title>test</title>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js" type="text/javascript"></script>

    <script type="text/javascript">
    $(document).ready(function() {
        var destTable = $("#dataTable");
        $("#btnAdd").click(function() {

         var newRow = $("<tr style='margin-left:-60px'><td><INPUT type='checkbox' name='chk'/></td><td><INPUT type='text' name='txt[]' id='txt'/></td><td class='d_value'>...retrieving data...</td></tr>");
          $("#dataTable").append(newRow);

          //newRow.find('input').autocomplete("get_cols_name.php", {
           //   width: 260,
            //  matchContains: true,
             // selectFirst: false
              //});
             $.get('index.php?get_data=1', {}, function(data) {
              newRow.find('.d_value').html(data);
             });
         });
      });

    </script>
</head>
<body>
<input type="button" value="click me" id="btnAdd" />
<table id="dataTable">

</table>
</body>
1 голос
/ 01 июня 2010

Вы используете $ (). Autocomplete (); получить get_coll_name.php. . $ () Автозаполнения (); скорее всего, плагин jQuery UI или jQuery, который использует AJAX для вызова PHP. Вам нужно будет использовать AJAX для вызова PHP. Вы не можете указать метод intervalo_manha (), вы должны указать страницу. Если вы используете фреймворк, такой как Zend, это проще, так как фреймворк позволяет вам определять методы в вызове.

1 голос
/ 01 июня 2010

если все коды на одной странице, попробуйте

echo "var newRow = $(\"<tr style='margin-left:-60px'><td><INPUT type='checkbox' name='chk'/></td><td><INPUT type='text' name='txt[]' id='txt'/></td><td>";
echo intervalo_manha();
echo "</td></tr>\");";
1 голос
/ 01 июня 2010

Это не сработает, потому что вы выполняете свой код внутри $ (document) .ready . Это означает, что php уже выполнен и не может быть выполнен после $ (document) .ready (это потому, что php только на стороне сервера). Либо вам придется использовать ajax, либо вам придется выполнить вызов функции php перед вызовом $ (document) .ready и поместить его в переменную:

var php_function_result = "<?php echo intervalo_manha(); ?>";

$(document).ready(function() {
...
// use php_function_result here
...
}
0 голосов
/ 03 июня 2010

Я решил свою проблему с помощью друга.

В основном то, что мы сделали.

Мы создаем div с помощью "php echo":

<div id="intervalo-manha"><?php echo intervalo_manha(); ?></div>

Тогда мы скрыли это с помощью css:

<style type="text/css">
    #intervalo-manha {
        display: none;
    }
</style>

После этого мы просто вызвали функцию div в функции jQuery:

var newRow = $("<tr style='margin-left:-60px'>...<td>" + $("#intervalo-manha").html() + "</td></tr>");

Я никогда не думал, что так может быть проще. :)

Спасибо за всех, кто дал мне советы и предложения.

привет

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