【问题标题】:call a php function from jquery从 jquery 调用 php 函数
【发布时间】:2011-09-06 15:47:56
【问题描述】:

我正在尝试找出最好的方法来做到这一点...我正在使用 JQuery 将数据提交给 PHP 函数,该函数将数据库中的数据作为 JSON 发送回,该函数正在工作。问题是,在成功时,我希望 JQuery 执行 PHP 函数......而且我宁愿不必在第一次 AJAX 成功的基础上再进行一次 AJAX 调用 - 特别是因为 php 函数是我所拥有的已经在我页面的其他地方使用过。这是我的代码:

查询:

$.ajax({
    type: "POST",
    url: post_url,
    success: function(group) //we're calling the response json array 'tree'
    {
        //WANT TO CALL THE PHP FUNCTION HERE
    } //end success
 }); //end AJAX

PHP:

<?php
foreach($groups as $group){
    echo '<option value="' . $group->id . '">' . $group->group_name . '</option>';
}
?>

【问题讨论】:

  • 为什么不把额外的函数调用放在你的 PHP 文件中?
  • 这只是一个例子,还是你真的想避免在javascript中写一行php?
  • 在第一个函数中创建结果时执行函数。 php 函数存在于服务器上,而 jQuery 在客户端上。没有 AJAX,他们就无法互相交谈。
  • 要回答您的问题,您可以像拨打任何其他 $.ajax 或 $.json 电话一样拨打电话。我也支持@brian_d 的回应。只需同时执行两个代码块。您已经有了上下文,为什么将它传递给客户端只是传递回服务器以获取更多信息?只需将所有信息都包含在响应中。

标签: php jquery ajax json codeigniter


【解决方案1】:

在构建响应的 php 脚本中,只需向对象添加一个额外属性,即要放入页面的 html 字符串,然后让 javascript 将其放在需要的位置。您别无选择,只能在服务器上运行 php 函数。

【讨论】:

  • 为什么不把你的显示和你的数据分开,在javascript端处理显示呢?
  • 我同意你的说法。我实际上对他的问题发表了评论,询问他为什么避免用 javascript 编写它,但决定只回答他的问题。
【解决方案2】:

您必须知道,您在这里处理的是两种范式,第一种是服务器端逻辑 (PHP),第二种是客户端逻辑 (JavaScript)。

不幸的是,如果不执行 AJAX 调用并呈现您想要显示的内容,就无法从客户端从 JS 调用 PHP。但是,您可以准备结果并使用您请求的 HTML 字符串设置 AJAX 响应的正文。

如果这不可能,我建议查看各种 JS 框架,这些框架将提供帮助以生成 select 字段的选项。

【讨论】:

    【解决方案3】:

    替代方案:

    1. 更改支持原始 AJAX 调用的 PHP,这样它就不会发回 JSON,而是完全按照您的要求发回 HTML。
    2. 在第一个成功的“内部”链接第二个 AJAX 调用,以便为 JSON->HTML 转换完成到服务器的第二次往返。
    3. 接受有时您需要在使用多种语言时“复制”表示规则,并使用类似 EJS 的东西来完成与 PHP 在其他地方所做的相同的 &lt;option&gt; 操作。

    【讨论】:

      【解决方案4】:

      如果你想从你的 javascript 中调用一个 php 函数,你必须在服务器上的它自己的文件中执行一个 AJAX 请求。这是因为 javascript 执行客户端,PHP 执行服务器端。因此,javascript 无法直接访问 PHP 函数。

      您可以使用 PHP 编写 JavaScript,也可以通过 AJAX 从 javascript 调用 php 文件。

      你能用 JavaScript 函数复制 PHP 函数的功能吗?

      这个或类似的东西对你有用吗:

      $.ajax({
        type: "POST",
        url: post_url,
        success: function(groups) //we're calling the response json array 'tree'
        {
              for(group in groups){
                  document.writeln("<option value='"+groups[group].id+"'>"+groups[group].group_name+"</option>";
              }
        }
      }); //end AJAX
      

      【讨论】:

        猜你喜欢
        • 2011-04-02
        • 2012-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多