【问题标题】:Laravel 4: How to display a message without redirecting?Laravel 4:如何在不重定向的情况下显示消息?
【发布时间】:2014-04-10 14:05:24
【问题描述】:

情况是这样的:

在我的 Laravel 4 应用程序中,验证后,它重定向到显示成功消息的同一页面。

它工作正常。问题是页面很重,因此重定向过程最多需要 3 秒。

我想做的是在不重定向的情况下显示一条消息。 为了节省重新加载页面所需的时间,并立即显示消息。

这是代码:

return Redirect::back()->with('message','<b>Congratulations! You have succesfully sent the email');

这是问题:

是否有可能获得相同的结果,即显示一条成功的消息,而无需重定向到同一页面? 如果是,如何做到这一点?

非常感谢!

【问题讨论】:

  • 你可以使用 xajax 函数。

标签: php html redirect laravel laravel-4


【解决方案1】:

使用适用于 Laravel 的完整通用示例扩展 @Chen-Tsu Lin 的答案:

首先,您的代码应该可以在没有任何 javascript 的情况下运行,因此您需要扩展已有的内容。

让路由监听 ajax 请求(发布或获取更适合您的):

Route::post('helpers/ajax',
array('as' => 'ajax',  'uses' => 'App\Controllers\AjaxController@someMethod')
);

使用 jQuery,您将停止表单提交的默认功能并将其发送到您的 ajax uri

$('#yourSubmitButton').on('click', function(e){
    e.preventDefault(); // the form will not be submitted
    //do whatever necessary to collect the data, or just serialize the form
    var formdata = $('#yourForm').serialize();
    //perhaps validate the data, if you need, and then send by ajax
    $.ajax({
    url:'helpers/ajax',
    type:'POST', //or GET if you wish as long as its consistent with the route
    data: formdata,
    dataType:'json', //this is for the data you will receive from the controller
    cache:false,
    success:function(data){
     //show the "mail send message and whatnot
    },
    error:function(jxhr){
     //handle errors
    } })
    })

缺少的是控制器上的方法,用于接收发布数据、验证、处理和回显请求(很可能是一个 json_encoded 数组)。

更多内容取决于您的实施。

【讨论】:

    【解决方案2】:

    常用的方法是通过AJAX进行验证。

    并通过不同的响应显示成功或失败消息。

    可以使用原生javascriptXmlHttpRequestObject或者jQuery$.ajaxFunction...等来做AJAX。

    您可以参考以下资源:

    javascriptXmlHttpRequest 对象: http://mdn.beonex.com/en/DOM/XMLHttpRequest/Using_XMLHttpRequest.html

    jQuery$.ajax 功能: https://api.jquery.com/jQuery.ajax/

    【讨论】:

    • 我可以问一下吗?现在在我的控制器中,我做 3 件事:1- 显示成功消息 2- 在数据库中插入数据 3- 发送电子邮件。真正的验证是在客户端使用 Jquery 进行的(但我也在服务器端进行了第二次验证)。您的意思是通过 AJAX 完成所有任务,还是仅通过 AJAX 显示消息?如果我在用户单击提交按钮时使用 Jquery 显示一条消息(如果 jquery 验证成功),您会怎么想?谢谢!
    • 如果2 &amp; 3 也是您的验证过程,请在 ajax 中执行所有操作。我通常这样做: 1. Laravel 加载页面。 2.点击提交然后发送ajax请求到控制器中处理ajax的其他函数3.控制器发送响应,比如JSON:{“status”:1} 4.根据ajax响应status在屏幕上放置不同的消息
    【解决方案3】:

    我认为你只能使用 AJAX 和 Javascript,通过 ajax 发送数据并使用 javascript 显示信息

    【讨论】:

    • 你能举个例子吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-11
    • 1970-01-01
    • 2020-01-10
    相关资源
    最近更新 更多