繁体   English   中英

如何在不重新加载页面的情况下在 Laravel 中提交 PUT 方法表单?

[英]How do I submit a PUT method form in Laravel without reloading the page?

这是我在 Laravel 应用程序中的表单 html:

 <button onclick="submitForm()">submit form using jquery ajax</button>
  <form name="fbCommentCountform" action="{{ route('blogs.update', ['id'=>$id]) }}">
    {{ csrf_field() }}
    <input type="hidden" name="_method" value="PUT">

    <input type="text" name="commentCount" id="fbFormCommentCount">
  </form>

这是我尝试使用的 ajax Javascript 代码:

function submitForm() {
  var http = new XMLHttpRequest();
  http.open("POST", "{{ route('blogs.update', ['id'=>$id]) }}", true);
  http.setRequestHeader("Content-type","application/x-www-form-urlencoded");
  var params = "search=";
  http.send(params);
  http.onload = function() {
    alert(http.responseText);
  }
}

我对如何定义参数以使其在我的 id #fbFormCommentCount 输入框中发送数据感到有些困惑。 我只是希望表单在单击按钮时提交而不重新加载页面并使用 PUT 方法,因为它用于控制器中的更新请求。 任何指导将不胜感激!

你可以使用 jQuery 的.ajax()很容易地做到这一点,如下所示:

$('form').on('submit', function(e){
    e.preventDefault();
    var $this = $(this);

    $.ajax({
        url: $this.prop('action'),
        method: 'PUT',
        data: $this.serialize(),
    }).done(function(response){

    }).error(function(err){

    });
});

e.preventDefault()将阻止表单提交并导致页面刷新。

然后,只需将您的按钮到表单,并给它一个typesubmit

<button type="submit"> Submit form using jquery ajax </button>

您需要从表单中获取值,如下所示:

var commentCount = document.getElementById('fbFormCommentCount').value,
    params = "commentCount=" + commentCount;

您还需要获取并附加您的_method字段和 csrf 令牌。 如果他们没有 ID,您可以按名称获取它们:

var method = document.getElementsByName('_method')[0].value,
    token = document.getElementsByName('_token')[0].value;

您需要阻止表单提交的默认事件。

这是如何做到这一点的最小示例

https://jsfiddle.net/w208gsj7/1/

HTML

<form>
  <button type="submit"id="submit">
    Submit
  </button>
</form>

JS

document.getElementById('submit').addEventListener('click', submitForm);

function submitForm(ev) {
  ev.preventDefault();
  // ... code
}

对于那些感兴趣的人,我可以在 Laravel 中提交表单而无需重新加载页面。 我在使用 AngularJs 时这样做了,所以不得不把所有东西都放在 $(function(){}); 中。 像这样:

$(function()
{
    $('form').on('submit', function(e)
    {
        e.preventDefault();
        var $this = $(this);
        $.ajax({
            url: $this.prop('action'),
            method: 'POST',
            data: $this.serialize(),
            success: function(result)
            {
                console.log(result);
            }
        });
    });
});

注意:较新版本的 JQuery 使用“success:”而不是“.done”。 希望这可以帮助使用较新版本的人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM