2015-11-19 44 views
2

你好,我用同樣的腳本Laravel4.2Laravel5.1和問題是Laravel 4.2工作完美,但Laravel 5.1,我不能理解爲什麼它返回的結果不好laravel 5.1支持:: AJAX返回假

問題是爲什麼我得到$request->ajax()爲Laravel 5.1虛假?

routes.php文件

Route::post('/upload-image', [ 
    'as' => 'upload-image-post', 
    'uses' => '[email protected]' 
]); 

PageController.php

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use App\Http\Requests; 
use App\Http\Controllers\Controller; 

class PageController extends Controller 
{ 

    public function profileImage(Request $request) 
    { 
     //here is problem 
     //result good: (Laravel 4.2 shows true) 
     //result bad: (Laravel 5.1 shows false) 
     var_dump($request->ajax()); 
    } 

} 

上傳-image.blade.php(JS)

<script> 
jQuery(document).ready(function($) { 
    $('#upload_image').click(function(event) { 
     $('#image').trigger('click'); 
    }); 

    $('#image').change(function(event) { 
     /* Act on the event */ 
     $('#imageform').submit(); 
    }); 

    $('#imageform').ajaxForm({  
     beforeSubmit: function() { 
     }, 
     success: function(msg) { 
     }, 
     error: function(request, status, error) { 

     }, 
     complete: function(xhr) { 
      if(xhr.status != 401) { 
       $('#image').val(''); 
       result = xhr.responseText; 
       result = $.parseJSON(result); 

       if(!$.isEmptyObject(result.file_base_url)) { 
        var img = new Image(); 
        img.onload = function() { 
         $('#register_profile_photo').attr('src', img.src); 
         $('#register_profile_photo').attr('alt', result.image_alt); 
         //spinner.stop(); 
         $('#upload-image-error').text(''); 
        } 
        img.src = result.file_base_url; 
       } else { 
        $('#upload-image-error').text(result.image[0]); 
       } 

      } 
     } 
    }); 
}); 

上載image.blade .php(html)

<form enctype="multipart/form-data" name='imageform' role="form" id="imageform" method="post" action="{!! route('upload-image-post') !!}"> 
    {!! csrf_field() !!} 
    <div style="display:none;"> 
     <input type="file" name="image" id="image" placeholder="Please choose your image" > 
    </div> 
</form> 

<div class="profile-img"> 
    <img style="float: right" id="register_profile_photo" src="default.png" alt="Default image"> 
    <div style="float: right" class="img-edit"><a href="javascript:void(0);" id="upload_image">Edit picture</a></div> 
</div> 

PS。如果您測試laravel 4.2,則此代碼需要從「{!! .. !!}」更改爲「{{..}}」

+2

嘗試使用'$ request-> wantsJson()',而是依賴標準的'Accepts'標頭而不是非標準的'X-Requested-With'標頭。這可能是[此問題]的副本(http://stackoverflow.com/q/20475460/697370) –

+0

控制器的其他部分是否工作? –

+0

其他方法是簡單的方法不是ajax –

回答

2

我不認爲這個問題是由Laravel版本引起的。 Laravel消息顯示,ajax()調用傳播到Symfony's request component。而這個消息來源在5年前就改變了。

如果在兩種情況下都將X-Requested-With標頭髮送到您的應用程序,則應該跟蹤。您也可以將斷點設置爲Symfony\Component\HttpFoundation\Request::isXmlHttpRequest()並查看標題中的內容。