Jquery Ajax Post To Cakephp Controller


Jquery Ajax Post To Cakephp Controller

我正在开发一个web应用程序,该应用程序使用CakePHP作为后端,JQuery作为前端。为了与服务器进行通信,我已经创建了表单和jquery ajax,并在浏览器中显示ajax向网络中的url发送的请求值。以下是我现在拥有的:

问题

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

Ajax工作的第1页

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

第2页,我想在其中显示ajax请求值Add.ctp

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

审查控制器添加功能

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

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

在这种情况下,看起来您正在张贴到/reviews/add。当您这样做时,您的add方法将接收post数据,并尝试渲染add.ctp视图文件。这整个渲染就是AJAX成功的"结果"。在add方法中,你没有对视图设置任何内容,也没有返回任何值,所以"结果"是空的。

在AJAX成功的情况下,你试图打开一个新窗口,该窗口再次调用add方法,并且你试图包括参数"id",该参数对返回的结果没有任何作用,只尝试使用给定的参数再次运行该方法,但你的方法无论如何都不要求任何参数。。。

如果你想打开一个新的窗口,点击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
    }
});

在ajax运行的页面上

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

ajax的成功就像一样

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