【问题标题】:Laravel Ajax Upload imageLaravel Ajax 上传图片
【发布时间】:2016-10-25 13:23:21
【问题描述】:

我的 laravel ajax 应用程序出现问题,我无法通过 ajax POST 上传图像/文件。总是返回编号。

我觉得AJAX的问题,不用Ajax的上传效果很好

请在下面找到我上传图片的代码。

ajax : 

    $('form[name="photoedit"]').on('submit', function (e){
        var res = $(this).attr('id');
        var str = res;
        var variable = str.substr(1);

        e.preventDefault();

        var pic = $('#u'+variable).val();
        var mur_id = $('#mur_i'+variable).val();

            $.ajax({
                type: 'post',
                dataType: 'json',
                data: new FormData($("#p"+variable)[0], pic, mur_id),
                contentType: false,       .
                cache: false,             
                processData: false,
                success: function( data ) {
                    ....
                    }

view : 

{!! Form::open(array('url'=> '/01/mur', 'method'=>'POST', 'enctype'=>'multipart/form-data', 'id'=>'p'.$mur->id, 'name'=>'photoedit')) !!}          

{{ Form::file('u'.$journal->id, ['class' => 'upload fileUpload', 'multiple'=>'multiple', 'name'=>'u'.$journal->id, 'id'=>'u'.$journal->id]) }}

{!! Form::hidden('edi_i'.$mur->id, $mur->id) !!}

{{ Form::hidden('mur_i'.$mur->id, $mur->id, array('id' => 'mur_i'.$mur->id)) }}

{!! Form::submit('Save', array('class'=>'btn ideng', 'id'=>'d'.mur>id, 'style'=>'border-bottom: 2px solid #2d9e36; border-radius: 0; font-size: 12px; padding: 3px 8px; float: right; background: #35b73f; color: #ffffff; margin: 10px 0 5px 0;')) !!}

{!!表单::close() !!}

controller :

if($request->hasFile('pic')){

if($request->ajax()){
    $avatar=$request->file('pic');
    $filename=time() . '.' . $avatar->getClientOriginalExtension();
    Image::make($avatar)->resize(650,500)->save(storage_path('img/profil/'01'/mur/'. $filename));

        $edi_id=Input::get('mur_id');
    $user = \App\Mur::find($edi_id);

    $user->image = $filename;
    $user->save();
        return \Response::json($user);
}
}else{
return 'No';
}

没有隐藏字段,它工作得很好。 经验:

数据:新的FormData($("#p"+variable)[0]),

【问题讨论】:

  • 尝试return Input::all() 并检查控制器实际收到的内容
  • 我在哪里添加 return Input::all() 在控制器中?
  • 您可以在函数内的第一行返回它

标签: php jquery ajax image laravel


【解决方案1】:
$(document).on('submit', 'form[name="photoedit"]', function(event) {
    event.preventDefault();
    var forms = document.querySelector('form[name="photoedit"]');
    var request = new XMLHttpRequest();
    var formDatas = new FormData(forms);
    request.open('post','/yourRouteHere');
    request.send(formDatas);

    request.onreadystatechange = function() {
        if (request.readyState === 4) {
            if (request.status === 200) {

            //Return message from controller here
            //Handle it

            }
        }
    }
});

这对我来说很好。我想它可以提供帮助。另外,我在您的 AJAX 中注意到,我没有看到您发布表单的 URL。

我猜你的 AJAX 应该是这样的:

$.ajax({
    url: '/your-post-url', //Notice this URL
    type: 'POST',
    dataType: 'json',
    data: {new FormData($("#p"+variable)[0], pic, mur_id)},
    success: function(data) {

    }
});

在您的控制器中访问带有名称属性的 HTML 表单中的输入类型文件

【讨论】:

  • url 和form url: '/01/mur' 一样
  • 您需要在 $.ajax 函数中指定 URL,因为您使用 e.preventDefault(); 表单的默认 URL 将不起作用。
  • 但是当我删除隐藏字段时它对我有用。 exp : data: new FormData($("#p"+variable)[0]),
猜你喜欢
  • 1970-01-01
  • 2020-07-04
  • 1970-01-01
  • 2017-06-04
  • 2015-08-13
  • 2015-04-23
  • 2019-11-06
  • 2020-01-11
  • 1970-01-01
相关资源
最近更新 更多