2016-10-25 4 views
1

У меня проблема в моем приложении ajax для laravel, я не могу загрузить изображения/файлы через ajax POST. всегда возвращает No.Laravel Ajax Загрузить картинку

Я думаю, что проблема в 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 ($ ("# р" + переменная) [0]),

+0

пытается 'вернуть вход :: все()' и проверить, что контроллер фактически получает –

+0

, где я добавляю return Input :: all() в контроллере? – nabil

+0

Вы можете вернуть его в первой строке внутри вашей функции –

ответ

0
$(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 форме

+0

url он такой же из формы url: '/ 01/mur' – nabil

+0

Вам нужно указать URL-адрес в вашей функции '$ .ajax', потому что вы используете' e.preventDefault (); 'URL-адрес по умолчанию для формы не будет работать. – Michel

+0

НО это работа для меня, когда я удаляю скрытое поле. exp: данные: новый FormData ($ ("# p" + variable) [0]), – nabil