在jQuery中调用PHP函数(var)

时间:2010-06-01 09:25:19

标签: php jquery function

我正面临一个小问题,我自己无法解决。

我有这个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 个答案:

答案 0 :(得分:1)

这不起作用,因为您在 $(document).ready 中执行代码。 这意味着php已经完成,并且在$(document).ready之后无法执行(因为php只是服务器端)。 你要么必须使用ajax,要么在调用$(document).ready之前必须进行php函数调用并将其放入变量中:

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

$(document).ready(function() {
...
// use php_function_result here
...
}

答案 1 :(得分:1)

如果所有代码都在同一页面上,请尝试

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>\");";

答案 2 :(得分:1)

您正在使用$()。autocomplete(); to get_coll_name.php。 $()自动完成();很可能是使用AJAX调用PHP的jQuery UI或jQuery插件。您需要使用AJAX来调用PHP。您不能指定方法in​​tervalo_manha(),您必须指定一个页面。如果你正在使用像Zend这样的框架,那么这很容易,因为框架允许你在调用中指定方法。

答案 3 :(得分:1)

试试这段代码:(请添加html标签以完成页面sice我无法在此处添加)

<?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>";

返回$ object; }

if($ _ GET ['get_data']){     echo intervalo_manha();     出口; }

&GT;

<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>

答案 4 :(得分:1)

使用ajax函数可能会更好。给它起名字。调用php-script,从输出中获取数据。

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

答案 5 :(得分:0)

我在朋友的帮助下解决了我的问题。

基本上我们做了什么。

我们使用“php echo”创建一个div:

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

然后我们用css隐藏它:

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

在此之后我们只是在jQuery函数中调用了div:

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

我从没想过会这么容易。 :)

感谢所有给我提示和建议的人。

问候