【问题标题】:Call PHP Function in jQuery (var)在 jQuery (var) 中调用 PHP 函数
【发布时间】:2010-06-01 09:25:19
【问题描述】:

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

我有这个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函数什么都不会返回,我什么也做不了。有没有办法做到这一点?

谢谢

【问题讨论】:

  • 所有代码都在一个php文件中吗?
  • 是的,它们在同一个页面中。我基本上想在 jQuery 中声明的变量中输出我的 php 函数。我不知道这是否可能,但是按照我在帖子中所说的方式,我不能做我想做的事。
  • 你必须小心你的措辞。你不能从 JS 调用 PHP 函数,但我认为这不是你想要做的(但你的标题暗示了它)。您所做的是,您通过 PHP 创建 HTML 页面,并在此过程中调用 PHP 函数,该函数生成一些 HTML,并将其结果注入到最终的 HTML 页面中。
  • 在您的函数中,您没有连接到数据库。您是否连接到脚本中某处的数据库?如果不是,您应该收到警告。您是否收到任何错误消息?
  • 您好,Felix,实际上我想要的是在 js 函数中调用 PHP 函数。我已经搜索过了,这似乎是不可能的,就像你提到的那样。我想要什么,当使用我的 js 函数添加新行时,它将添加一个输入和一个从数据库获取值的选择。这个select是php函数的输出。是的,Felix,我有一个连接字符串。我发布主题的方式,在第 1 篇文章中,我可以毫无问题地添加新行和用户自动完成。问题是将选择下拉列表(使用 DB 值)添加到动态创建的 html。

标签: php jquery function


【解决方案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
...
}

【讨论】:

  • 我的php函数是在调用“js”函数之前完成的。我会试试你的方法。谢谢
  • 尝试了您的建议但没有成功。添加 var 后,我的添加新行按钮不再起作用。
  • HTML 页面是由 PHP 创建的,所以从 PHP 函数中注入返回值是没有问题的。这与$(document).ready() 无关。对于 PHP,这只是文本。
  • 哦,我理解菲利克斯。谢谢你的解释。
  • @l3gion:这更像是对 Thariama 的评论,但不客气;)
【解决方案2】:

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

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

【讨论】:

  • 感谢 Reigel 的回答。我已经尝试过这种方法,但没有奏效。现在我什至无法在表中添加新行。
【解决方案3】:

您正在使用 $().autocomplete();到 get_coll_name.php。 $().autocomplete();很可能是使用 AJAX 调用 PHP 的 jQuery UI 或 jQuery 插件。您将需要使用 AJAX 来调用 PHP。你不能指定方法in​​tervalo_manha(),你必须指定一个页面。如果您使用的是 Zend 等框架,这会更容易,因为该框架允许您在调用中指定方法。

【讨论】:

  • 我们将不胜感激。谢谢
【解决方案4】:

试试这个代码:(请添加html标签来完成页面,因为我无法在这里添加它)

<?php 

函数intervalo_manha(){ return '这是我的数据';

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

返回$对象; }

if($_GET['get_data']) { 回声间隔曼哈(); 出口; }

?>

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

【讨论】:

  • 试过你的代码 jondm。谢谢。但是,你能解释一下输出应该是什么吗?
  • 我明白你想要做什么。不幸的是,我无法解决我的问题。还有其他建议吗?
【解决方案5】:

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

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

?

【讨论】:

  • 感谢您帮助我。我明天试试,今天太累了。 :)
【解决方案6】:

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

基本上我们做了什么。

我们用“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>");

我从没想过会这么简单。 :)

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

问候

【讨论】:

  • 也许我们可以用更简洁的方式来做。它有效,这很重要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-02
  • 2011-09-06
  • 2011-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多