Laravel 5中带有文件的Ajax表单提交 - php

我正在尝试在laravel 5中实现fileupload。但是首先要发送数据,例如简单的字符串。
我的表格:

    {!!Form::open(["url"=>"/photos", "method" => "post", "files"=>true, "onsubmit"=>"send();return false;"])!!}    
    {!!Form::text("title", null, ["class"=>"form-control"])!!}    
    {!!Form::submit("Send", ["class"=>"btn btn-primary", "id" => "submitForm"])!!}    
    {!!Form::close()!!} 

我的发送功能

function send() {
    var formData = new FormData(this);
    $.ajax({        url: "/photos",
                    method: 'POST',
                    data: formData,
                    processData: false,
                    contentType: false,
                    cache: false,
                    success: function(data) {
                        console.log(data);
                    },
                    error: function(data) {                   
                    }
                });
}

我的路线:

Route::post("/photos", "PhotosController@store");

我的店铺功能

public function store()
{
    $data = \Illuminate\Support\Facades\Request::all();
    return $data;
}

而且我有一个空数据!通过Formdata可以接收任何内容,但是如果我将参数从formData更改为{text:“ Hola”},那么我会在服务器的答复中看到这一点,但是将来无法通过文本上传照片。我究竟做错了什么 ?为什么我收到空的formdata?谢谢

php参考方案

由于我遇到了同样的问题并找到了解决方案,所以我认为应该在这里发布。

首先,您将必须使用var formData = $(this).serializeArray();而不是var formData = new FormData(this);来获取表单数据。

根据文档,Laravel将自动返回带有422状态代码的HTTP响应,其中包括验证错误的JSON表示形式。

完整的ajax调用:

//#ajax-form is the id of your form.
$("#ajax-form").submit(function(e)
    {
        var postData = $(this).serializeArray();
        var formURL = $(this).attr("action");

        $.ajax(
            {
                url : formURL,
                type: "POST",
                data : postData,
                success:function(data)
                {
                    console.log(data);
                    //data: return data from server
                },
                error: function(data)
                {
                    console.log(data.responseJSON);
                    //in the responseJSON you get the form validation back.
                }
            });
        e.preventDefault(); //STOP default action
        e.unbind(); //unbind. to stop multiple form submit.
});

如果要通过AJAX上传文件,建议阅读this。
希望这可以帮助!

快乐的编码:-)

Laravel Valet安装后,ping test.dev会返回“未知主机” - php

更新:不要使用“ .dev”。最初于2016年发布时,还不错。现在不是。首先将TLD更改为“ .localhost”之类的名称。 (此更改不会解决我的问题,但是如果您仍在使用“ .dev”,则可能会解决您的问题)。问题:我已经安装了Laravel Valet,并且似乎一切正常,除了我ping test.dev(它仅包含一个index.htm文件并且位于~/S…

验证php中的javascript对象 - php

在我的用户界面中,用户可以构建一些javascript对象,例如:var box = { "width": "100px", "height": "200px", "click": function () { alert("You clicked t…

从网址中删除特殊字符,但不删除其他语言字符 - php

我正在开发一个Web应用程序,人们可以用英语和其他语言发布文章(例如论坛)。为了从帖子标题创建漂亮的永久链接,我使用如下代码。PHP:$ln=preg_replace("/[^A-Za-z0-9[:space:]]/","",$name); $ln = strtolower($ln); $ln=str_replace(…

php:是否有充分的理由引用所有数组键/索引? - php

我正在遍历别人的代码,他们总是避免转义其数组键。例如:$ row_rsCatalogsItems [名称]代替$ row_rsCatalogsItems ['名称']因此,我不断地对自己接触的所有事物进行微小的更改,以应对这些惰性。但是现在我想知道这样做是否有很多好处。我得到它会在默认为字符串之前检查常量(我在处理常量时会讨厌php中的行为,因为即使未定义,…

如何在Laravel 5.4中设置cookie? - php

我在laravel 5.4中具有此功能,但无法从Cookie中获取任何信息。Cookie::queue('currentLang', 'heb', 999999999); echo $request->cookie('currentLang'); 但是我得到了一些长字符串,而不是我设置的字符串…