2011-12-28 88 views
0

嗨有人我有一个jQuery脚本提交表单,如果成功,它发送json输出回来。Ajax和jquery重定向

function subscribe(email, city){ 
    var email = $('input#email').val(); 
    var city = $('select#citySelect').val(); 

    $.ajax({ 
     url: 'http://www.amazingvouchercodes.co.uk/avc_dev/subscribe/subscribeTo', 
     type: 'post', 
     data: 'email='+email+'&city='+city, 
     dataType: 'json', 
     success: function(json){ 
      window.location.href = json['url']; 
      $('#notifications').append('<div class="success">'+json['success']+'</div>'); 
     } 
    }); 
} 

我的问题是,它显示的通知> JSON成功重定向重定向通知犯规演出前后,有没有办法来显示重定向后的通知?

感谢所有帮助表示赞赏:)

+0

什么是服务器端你在用框架吗?这听起来像是一个完美的flash范围用例,如果你的平台支持它的话。 – wrschneider 2011-12-28 15:18:40

+0

谢谢你) – 2011-12-28 15:55:37

回答

0

像AlienWebguy建议,

这是因为你加载了新的一页,所以任何JavaScript被重置。

我认为最好的方法是在布局/标题中设置一个元素,在屏幕顶部显示消息(如本网站通知您橙色栏中的内容)。所以在你的Ajax页面上,你设置了一个通知(session/cookie)变量。然后下一次加载页面(重定向后),布局会知道有一个待处理的通知,它会在布局/页眉中显示它并清除它(因此它只会显示一次)。

+0

我喜欢这种方法的声音,即时通讯相当新的jQuery和jscript可以给我一些信息如何做到这一点或指向我一些阅读材料:) – 2011-12-28 15:20:17

+0

@JoeElliott这其实是一些东西你可以用服务器端语言(比如PHP)来实现,而不是JavaScript。就像wrschneider99在你的评论中提到的一样,如果你使用的是服务器端框架(比如CakePHP,RoR),大多数已经内置了这个。 – 2011-12-28 15:22:45

+0

我使用codeigniter,所以是会话flash消息或者其他东西:) – 2011-12-28 15:25:02

0

你不得不这样做window.location.href = json['url'] + "?redirMsg=Foo+Bar";并在网页上检查是否redirMsg是在查询字符串,如果是的话,提醒您的通知。

0

你是说你想要成功功能导致重定向,然后更新页面上的东西,你被重定向到?

如果是这样,您将需要做一点不同。您被重定向到的页面将不会继续执行在第一页上开始执行的JavaScript。

一个选项是追加一个查询字符串变量来告诉下一页要更新。如:

window.location.href = json['url'] + "?msg=success"; 

然后在下一页上,它将检查该查询字符串变量,并进行更新(如果存在)。

在接下来的页面中,您可以包括像:

function getFromQuery(name){ 
    if(name=(new RegExp('[?&]'+encodeURIComponent(name)+'=([^&]*)')).exec(location.search)) 
     return decodeURIComponent(name[1]); 
} 

if (getFromQuery("msg")=="success") 
{ 
//do your update here 
$('#notifications').append('<div class="success">'+json['success']+'</div>'); 
}