Jquery Ajax发布到Cakephp控制器

时间:2015-11-18 14:17:20

标签: php jquery ajax cakephp

我正在研究使用CakePHP作为后端而JQuery作为前端的Web应用程序。为了与服务器通信,我已经创建了表单和jquery ajax和浏览器,向网络中的url显示ajax发送的请求值。这就是我现在所拥有的:

问题

I want to display ajax post value into add.ctp which is not showing 

Page 1 Ajax工作的地方

<script type="text/x-javascript">   
$(".hover-star").click(function () {
$("#hover-test").css("color", "#ff6a00");

    var id= $('input[name=starrating]:checked').attr('id');

    $.ajax({
        type: "POST",
        url: '<?php echo Router::url(array('controller'=>'Reviews','action'=>'add'));?>',
        cache: false,
        data: "id="+id,
        dataType: 'HTML',
        success: function(result) {
            window.open('/app/webroot/reviews/add/'+id,'_self');

        },      
        error: function (response, desc, exception) {
            // custom error
        }
    });
});   
</script>

<form method="post">
    <input class="hover-star" type="radio" name="starrating" id="1" value="1" title=""/>
    <input class="hover-star" type="radio" name="starrating" id="2" value="3" title=""/>    
    <input class="hover-star" type="radio" name="starrating" id="3" value="3" title=""/>    
</form>

我希望在哪里显示ajax请求值Add.ctp

<?php echo $this->ratingPost;?>

评估控制器添加功能

function add()
{    
    $this->ratingPost= $data = $this->data;
}

2 个答案:

答案 0 :(得分:1)

看起来可能会出现一些问题。首先,您需要了解AJAX将把它的数据发送到指定的URL并等待来自服务器的响应。响应将包含在&#34;结果中。&#34;

在这个例子中,它看起来像是要发布到/ reviews / add。执行此操作时,add方法将接收post数据并尝试呈现add.ctp视图文件。整个渲染是返回到您的AJAX成功的结果。&#34;在您的添加方法中,您没有为视图设置任何内容,并且您没有返回任何值,因此您的&#34;结果&#34;是空的。

在您的AJAX成功中,您尝试打开一个新窗口,再次调用add方法,并且您尝试包含参数&#34; id&#34;哪个不会对返回的结果做任何事情,只尝试使用给定的参数再次运行该方法,但是你的方法无论如何都不会要求任何参数......

如果你想用点击的id值打开一个新窗口,为什么甚至使用AJAX,只需将id作为参数发送到你的add方法。一般来说,我认为AJAX用于动态更新当前加载页面上的内容。我将在您的代码中突出显示我正在讨论的内容。

您的脚本

<script type="text/x-javascript">   
  $(".hover-star").click(function () {
    $("#hover-test").css("color", "#ff6a00");
    var id= $('input[name=starrating]:checked').attr('id');

    window.open('/app/webroot/reviews/add/'+id, '_self');
  }
</script>

您的添加方法

public function add($myID=null){
  $this->set('myID', $myID);
}

如果你致力于AJAX,你可以通过创建一个新方法来处理返回的AJAX的渲染,这样做。我只是不明白这一点。您还必须将从AJAX方法返回的内容限制为URL安全编码。

AJAX方式

$.ajax({
    type: "POST",
    url: '<?php echo Router::url(array('controller'=>'Reviews','action'=>'add'));?>',
    cache: false,
    data: "id="+id,
    dataType: 'HTML',
    success: function(result) {
        window.open('** path to new method for rendering view **'+result, '_self');
    },      
    error: function (response, desc, exception) {
        // custom error
    }
});

答案 1 :(得分:0)

在ajax工作的页面上

<div id="show"></div>

ajax的成功就像

success: function (result) {
                $("#show").html(result);
                $("#show").show();
            }