【问题标题】:Submitting forms using AJAX in laravel在 laravel 中使用 AJAX 提交表单
【发布时间】:2016-12-16 00:54:49
【问题描述】:

我创建了一个表单来将数据提交到数据库中。当我不使用 AJAX 时,这工作正常。

即使在添加 ajax 之后,它也会将我带到另一个页面并显示文本,即我在控制器中返回的内容。

我的控制器功能

 public function newAppointment(Request $request){
    // Validate the request...
    $this->validate($request, [
        'name' => 'required',
        'email' => 'email|required',
        'mobile' => 'numeric|required',
        'date' => 'date|required',
        'time' => 'required',
    ]);

    $otp = rand(100000, 999999);

    $schedule = new \App\Schedules;

    $schedule->name   = $request->name;
    $schedule->email  = $request->email;
    $schedule->mobile = $request->mobile;
    $schedule->date   = $request->date;
    $schedule->time   = $request->time;

    $schedule->save();

    $id = $schedule->id;

    $verify = array('otp'=>$otp, 'id'=>$id);
    echo json_encode(array('verify'=> $verify));


}

Ajax 脚本

<script type="text/javascript">     
        $(document).ready(function (e){
            $("#newAppointment").on('submit',(function(e){
                e.preventDefault();
                $.ajax({
                    url: "appointment",
                    type: "POST",
                    data:  {name: $("#name").val, email: $("#email").val, mobile: $("#mobile").val, date: $("#date").val, time: $("#time").val },
                    contentType: "application/json",
                    cache: false,
                    processData:false,
                    success: function(data){
                        alert("Success");
                    },
                    error: function(data){
                        alert(data.error->first());
                    }           
                });
            }));
        });
        </script>

当我点击提交按钮时,我会在新页面中获得一些文本作为输出,即我在控制器中返回的内容。

提交表单后如何在同一页面上。

{"verify":{"otp":847042,"id":44}}

【问题讨论】:

  • 您在提交表单后仍然被重定向?这是你的主要问题吗?
  • 如果我正确理解您的问题,您不希望在提交表单点击后重定向。您必须将提交按钮的类型更改为按钮或在 Ajax 请求后添加返回 false;声明
  • 是的,当我点击提交按钮时,我被重定向到一个空白页面,其中包含我在控制器上返回的文本..

标签: php json ajax laravel


【解决方案1】:

因为你的js代码有错误:

error: function(data){
    alert(data.error->first());
}

这将导致此事件永远不会发生。

【讨论】:

  • 我试过这样。error: function(data){ alert(data.error.first);现在我在 RouteCollection.php 第 218 行错误中得到 MethodNotAllowedHttpException ..
【解决方案2】:

尝试:

  $("#newAppointment").on('click',(function(evt){
            evt.preventDefault();
            $.ajax({
                url: "/appointment",
                type: "POST",
                data:  {name: $("#name").val(), email: $("#email").val(), mobile: $("#mobile").val(), date: $("#date").val(), time: $("#time").val() },
                processData: false,
                contentType: false,
                success: function(data){
                    console.log(data)
                },
                error: function(msg){
                    console.log(msg)
                }           
            });
        }));

【讨论】:

  • 仍然被重定向到带有我在控制器中重定向的文本的新页面..
  • ok,试试把你的表单代码从打开到关闭也加进去看看这里有没有问题,否则也试试在成功和错误函数中添加return false;也可以防止表单被发送等
【解决方案3】:

您无需提交表单。只需将 AJAX 请求(POST 类型)发送到您在 ROUTE 中定义的 URL (/appointment) 即可将您带到函数 newAppointment。

尝试在控制器中返回一些东西,以便您可以接收它

success: function(data){
    alert("Success");
},

在数据中,您应该拥有控制器中返回的内容。

【讨论】:

  • 我在成功时返回一个 json 格式的数组。 echo json_encode(array('verify'=> $verify));
  • 不,echo 正在浏览器上打印。使用 return json_encode(array('verify'=> $verify)); 将信息发送回 AJAX 请求。
  • 感谢您,我将 echo 更改为 return,但是当我使用语法从控制器返回一个数组时 return json_encode(array('verify' => $verify));。那么,我怎样才能在我的视图上打印这个..
  • 您在 Javascript 中的成功函数中接收到数组(数据变量)。因此,您可以 echo(data) 或使用 jQuery 将信息放在您想要的任何位置。
  • 问题是当我使用 $("#errors").html(data); 时,它会打印 {"verify":{"otp": 183111,"id":5}}。并且 $("#errors").html(data["otp"]); 不起作用。
【解决方案4】:

试试

$("#newAppointment").submit(function(){
   ...
   ...
});

$("#newAppointment").on('submit', function(){
   ...
   ...
});

【讨论】:

  • 两者都试过了,但我仍然被重定向到一个新页面,其中包含我以 json 格式编码的文本..
猜你喜欢
  • 1970-01-01
  • 2015-02-05
  • 2019-05-04
  • 1970-01-01
  • 2020-03-25
  • 2015-08-16
  • 2015-10-25
  • 2016-10-31
  • 1970-01-01
相关资源
最近更新 更多