我正在开发一个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();
}