通过jquery ajax调用函数

时间:2012-07-04 08:02:38

标签: php ajax cakephp jquery

现在已经有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']);
    }

1 个答案:

答案 0 :(得分:2)

网址

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请求的data属性的对象。