如何在laravel中不刷新页面的情况下发送数据?

Posted

技术标签:

【中文标题】如何在laravel中不刷新页面的情况下发送数据?【英文标题】:How to send data without refreshing page in laravel? 【发布时间】:2018-05-29 15:19:04 【问题描述】:

我需要在不刷新页面的情况下将数据发送到数据库。

家庭刀片:

<form class="chat" id="message" action="#" method="post">
    <input type="hidden" name="_token" id="_token" value=" csrf_token() ">
    <li>
        <div class="panel-footer">
            <div class="input-group">
                <input type="text" name="message" class="" placeholder="Type your message here..." />
                <span class="input-group-btn">
                    <button type="submit" class=" btn-success btn-sm searchButton" id="save" >
                    Send
                    </button>
                </span>
            </div>
        </div>
    </li>
</form>

控制器:

public function message(Request $data)

    $ins = $data->all();
    unset($ins['_token']);
    $store = DB::table("chatbox")->insert([$ins]);
    return Redirect('Users/home')->with('message',"success");

阿贾克斯:

<script>
$(document).on("click", ".save", function() 
    $.ajax(
        type: "post",
        url: '/Users/message',
        data: $(".message").serialize(),
        success: function(store) 

        ,
        error: function() 
        
    );
);
</script>

目前,当我发送数据时,它会自动刷新整个页面,但只需要刷新特定的表单。

【问题讨论】:

【参考方案1】:

您必须在 javascript/jquery 表单 submit 函数中处理函数并使用 e.preventDefault() 停止 html 以提交表单。

在以下代码类型中尝试您的 ajax 代码。

$('#message').submit(function(e) 
    e.preventDefault();
    //your ajax funtion here
);

您可以在成功功能中重置/刷新表单

 $("#message").trigger("reset");

【讨论】:

【参考方案2】:

您应该将按钮的类型从submit 更改为button,例如:

<button type="button" class=" btn-success btn-sm searchButton" id="save" >end</button>

或使用e.preventDefault(); 阻止默认操作(submit),例如:

$(document).on("click",".save",function()
    e.preventDefault(); //Prevent page from submiting
    ...
    ...
); 

注意:还请注意,您没有类 save 但 ID 为 save 的按钮,因此事件处理程序应如下所示:

$(document).on("click", "#save", function()
________________________^

【讨论】:

但是我们已经保存了id 不确定你的意思,但既然你有一个 id 保存选择器应该是 #save 作为我的答案点,但在你原来的帖子你有类选择器 .save 代替.. .【参考方案3】:

您需要阻止默认的表单提交,并改用脚本

$(document).on("click", "#save", function(e) 

    e.preventDefault(); // Prevent Default form Submission

    $.ajax(
        type:"post",
        url: '/Users/message',
        data: $("#message").serialize(),
        success:function(store) 
            location.href = store;
        ,
        error:function() 
        
    );

);

而不是返回重定向,而是从控制器返回 url 并让脚本处理重定向

public function message(Request $data)

    $ins = $data->all();
    unset($ins['_token']);
    $store = DB::table("chatbox")->insert([$ins]);
    session()->flash('message', 'success');
    return url('Users/home');

【讨论】:

【参考方案4】:

删除 return Redirect('Users/home')-&gt;with('message',"success"); 并返回一个类似

的数组
return ['message' => 'success'];

【讨论】:

以上是关于如何在laravel中不刷新页面的情况下发送数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不刷新页面的情况下将数据从 Android 发送到 PHP 并显示

如何在不刷新页面 LARAVEL PHP SQL 的情况下插入复选框表?

如何在不刷新页面的情况下从数据库中的textarea添加数据[重复]

Laravel 8 Yajra DataTable 在同一页面刷新

在没有屏幕刷新的情况下,使用 jQuery 更改不透明度在 Chrome 或 Safari 中不起作用

在不刷新浏览器的情况下浏览页面