使用Ajax/Javascript在Zend中重定向的Post参数
好的,情况是这样的:我在Zend上使用Ajax,这样当我从日历中选择日期时,它会将我重定向到一个带有POST参数的控制器(实际上是一样的,所以有点像重新加载页面),这样我就可以用新的日期显示视图 问题是:当我选择一个新日期时,它会工作,将我重定向到控制器,并且视图页面会重新加载,但没有参数 这是我的index.phtml:使用Ajax/Javascript在Zend中重定向的Post参数,javascript,jquery,ajax,zend-framework,parameter-passing,Javascript,Jquery,Ajax,Zend Framework,Parameter Passing,好的,情况是这样的:我在Zend上使用Ajax,这样当我从日历中选择日期时,它会将我重定向到一个带有POST参数的控制器(实际上是一样的,所以有点像重新加载页面),这样我就可以用新的日期显示视图 问题是:当我选择一个新日期时,它会工作,将我重定向到控制器,并且视图页面会重新加载,但没有参数 这是我的index.phtml: <script> $(document).ready(function() { function update() { var ndat
<script>
$(document).ready(function() {
function update() {
var ndate = document.getElementById("new_date").value;
alert(ndate);
$.ajax({
type: 'POST',
url: '/model/control/index',
data: ndate,
dataType : 'html',
success: function( data ) {
alert('OK');
window.location.replace('/model/control/index');
}
});
}
}
</script>
因此,我得到了第一个带有ndate值(日期)的警报。
我得到了第二个警报(OK),这意味着它成功了。
页面重新加载,但我仍然得到一个“KO”。
因此,我仍然无法在控制器中获取“ndate”值
我的问题:如何使用POST参数重新加载页面/重定向到控制器?
如何将我在警报中显示的“ndate”值作为POST参数传递?
提前谢谢,请帮帮我
编辑
这里有一个变量转储,使用“window.location.replace('relancecab');”将$this->getRequest()->getParams()和getPost()转储到这里
现在是“window.location.replace('relancecab?ndate='+ndate);”
正如你所看到的那样,GET工作,但不是用POST 你可以做到
$.ajax({
type: 'POST',
url: '/model/control/index',
data: "ndate=" + ndate,
dataType : 'html',
success: function( data ) {
alert('OK');
window.location.replace('/model/control/index?ndate=' + ndate);
}
});
并通过从url获取参数在控制器端处理它
编辑:
您还可以将发布的变量分配给视图,如
if($this->getRequest()->isPost() ) {
echo 'OK';
$ndate = $this->getRequest()->getPost('ndate', null);
$this->view->ndate = $ndate;
} else {
echo 'KO';
}
您可以在重新加载的视图中使用新日期您可以生成一个
表单
并提交它:
var url = '/model/control/index';
$.ajax({
type: 'POST',
url: url,
data: "ndate=" + ndate,
dataType : 'json',
success: function( data ) {
var form = $('<form></form>').attr('method', 'POST').attr('method', url);
$.each( data , function( key, value ) {
var input = $('<input></input>');
input.attr('type', 'hidden');
input.attr('name', key);
input.attr('value', value);
form.append(input);
});
$(document.body).append(form);
form.submit();
}
});
var url='/model/control/index';
$.ajax({
键入:“POST”,
url:url,
数据:“ndate=“+ndate,
数据类型:“json”,
成功:功能(数据){
var form=$('').attr('method','POST').attr('method',url);
$。每个(数据、函数(键、值){
变量输入=$('');
input.attr('type','hidden');
input.attr('name',key);
input.attr('value',value);
表单。追加(输入);
});
$(document.body).append(表单);
表单提交();
}
});
您必须对PHP返回进行
json\u编码。
那么为什么要执行POST请求呢?而且不是一个GETHi,谢谢你的代码,它工作得很好,但是有什么方法可以使用POST作为参数吗?只是我被要求使用POST。在POST请求中,参数不能在url中看到,但您可以将url更新到ajaxI中的'/model/control/index?ndate='+ndate
,我不希望在url中看到参数。你的代码非常适合获取参数,你知道如何处理POST吗?因为即使我在ajax中使用type:'POST',我仍然无法在控制器中接收任何POST参数,并且仍然得到'KO'…您想在成功回调中发布吗?如果您确定您的请求,请尝试打印$this->getRequest()->getMethod()
甚至$this->getRequest()
看看你有什么。编辑第一篇文章回答你的问题。GET工作,但不是POST。提前感谢…因为当您执行window.location.replace('/model/control/index')
时,您不会执行POST
请求!!我不明白您想要实现什么,为什么需要ajax调用和重定向?在ajax请求成功时,替换alert('OK')代码>通过警报('ajax结果:'+数据)
并查看控制台中的内容。我试图实现的是将Javascript参数作为POST传递到同一页面以更改日期,从而使用新日期重新加载页面。带有警报(“ajax结果:”+数据);它会返回一个HTML页面(我正在尝试重新加载的页面)。我希望它能像GET一样工作(它正在工作),但不会看到URL中的参数。
$.ajax({
type: 'POST',
url: '/model/control/index',
data: "ndate=" + ndate,
dataType : 'html',
success: function( data ) {
alert('OK');
window.location.replace('/model/control/index?ndate=' + ndate);
}
});
if($this->getRequest()->isPost() ) {
echo 'OK';
$ndate = $this->getRequest()->getPost('ndate', null);
$this->view->ndate = $ndate;
} else {
echo 'KO';
}
var url = '/model/control/index';
$.ajax({
type: 'POST',
url: url,
data: "ndate=" + ndate,
dataType : 'json',
success: function( data ) {
var form = $('<form></form>').attr('method', 'POST').attr('method', url);
$.each( data , function( key, value ) {
var input = $('<input></input>');
input.attr('type', 'hidden');
input.attr('name', key);
input.attr('value', value);
form.append(input);
});
$(document.body).append(form);
form.submit();
}
});