【问题标题】:Call a function through jquery ajax通过jquery ajax调用函数
【发布时间】:2012-07-04 08:02:38
【问题描述】:

现在已经 2 天了,但我仍然无法解决这个问题。 所以基本上我试图通过 jquery ajax 调用一个 php 函数 但没有任何工作,我不确定问题是什么...... 这是我的代码

ajax

$(document).ready(function() {
    $("#idCheck1").click(function(){
        $.ajax({
            url:'../../../../Controller/PostsController.php', 
            data: {action: 'update_checkbox'},
            success:function(result){
//                $("#dsa").html(result);
            } 
        });
    });
});

视图

<?php echo $this->Form->create("Posts", array("action" => "update_checkbox", "id" => "checkingBox")) ?>
                    <td>
                        <?php
                        echo $this->Form->input('Post.' . $i . '.id', array("type" => "hidden", "label" => false, "value" => $sum['posts']['id']))
                        ?>
                        <?php
                        echo $this->Form->input('Post.' . $i . '.done', array("type" => "checkbox", "label" => false, "value" => "1", "id" => "idCheck1"))
                        ?>
                    </td>
                </tr>
                <?php
                $i++;
            }
            ?>

        </table>
        <?php echo $this->Form->end(); ?>

控制器

 public function update_checkbox() {
        //    debug($this->data);
        $var = $this->Post->saveCheckBox($this->data);
        $this->set("result", $var);
    }

模型

public function saveCheckBox($checkbox) {
        debug($checkbox);
        $this->saveAll($checkbox['Post']);
    }

【问题讨论】:

  • 您是否尝试过自己调试。如果是,哪里出错了?例如。是提出的请求,如果是,结果是什么,等等。
  • 你能在浏览器中访问这个网址吗:url:'../../../../Controller/PostsController.php'
  • 实际问题是什么。您是否确认 .click(function(){ 正在触发....确认正在向 PostsController.php 发出 HTTP 请求?...尝试在 $.ajax 上添加一个 errror:function(result){}提醒您是否有任何其他有用的信息。
  • 您是否尝试调试以确定请求是否发送到服务器?

标签: php ajax cakephp jquery


【解决方案1】:

网址

url:'../../../../Controller/PostsController.php'

看起来不对。由于这是一个通过浏览器的 AJAX 请求,因此您不能使用尝试在文件夹层次结构中向上移动的相对路径,因为浏览器 url 不能以这种方式工作。您应该发出该请求,以便它通过 Web 服务器传递,即 url 应如下所示:

url:'http://localhost/Controller/PostsController.php'

url:'/Controller/PostsController.php'

第一个选项是绝对 url,但这也使代码不太灵活(假设您将域从 localhost 更改为其他内容)。第二个选项是一个相对 URL,但它是相对于您的 Web 服务器的域根目录的(即在示例中它仍然会解析为 localhost/Controller...)。

在这两种情况下,根据您发布的内容,您的 PHP 文件应该位于站点文档根目录中的 Controller/ 文件夹中。然而,您的代码结构表明您正在使用某种框架(例如 Zend、Symfony 或 CodeIgniter)?如果是这种情况,如果您发布有关您正在使用的框架的信息以及可能会改变答案的信息将会很有帮助。

更新

在 cakePHP 的情况下,你应该通过前端控制器访问控制器,这意味着 URL 应该是这样的:

url:'/posts'

更新 2

对于 jquery 端,一个完整的 ajax 请求示例可能如下所示:

$(".idCheck").click(
   function(){ 
      var idVal = $(this).val();

      $.ajax({ 
         url:'/posts/update_checkbox', 
         data: {id: idVal }, 
         type: 'POST', 
         success:function(result){ 
            $("#dsa").html(result); 
         } 
      }); 
  });

请注意,该 URL 已经包含 update_checkbox 操作(即您要执行的操作的完整 url),并且数据对象包含您要发送到服务器的单击元素的值。如果您想发送完整的表单,您还可以使用 $('#myformselector').serialize() 将表单中的所有输入转换为适合 ajax 请求的数据属性的对象。

【讨论】:

  • 永远不要使用绝对路径,例如:http://localhost/Controller/PostsController.php。如果您将文件移动到生产环境或其他域,则所有 URL 都将停止工作。额外强调 OP :-)
  • "如果您发布有关您正在使用的框架的信息会很有帮助" -> 问题被标记为 cake
  • 感谢您的回复。我试图更改网址。但是两者中的任何一个都不起作用:(所以当我在 chrome 中调试时,这显示了错误i49.tinypic.com/slmmwl.jpg
  • @Catherine 请参阅更新 2 以获取至少应该正确访问您的控制器的示例 jquery 请求。关于 array_keys 的错误表明您的错误发生在 PHP 端。查看控制器的代码,id 说这一行: $var = $this->Post->saveCheckBox($this->data);应该是这样的: $var = $this->Post->saveCheckBox($this->request->data); (注意 $this->request->data 部分)。
  • 我现在没有想法了,CakePHP 还不够熟悉,我不知道该去哪里找了。我只能说遵循常见的 PHP 调试实践。 IE。检查变量是否包含您期望它们包含的内容,检查函数是否被调用。在使用您的模型或帖子值等之前先尝试使用虚拟数据。
猜你喜欢
  • 2020-08-31
  • 1970-01-01
  • 1970-01-01
  • 2019-03-13
  • 2023-04-11
  • 1970-01-01
  • 2011-10-28
  • 2018-07-27
  • 1970-01-01
相关资源
最近更新 更多