ajax - laravel 5.1 请求::ajax 返回 false

标签 ajax laravel laravel-4 laravel-5 laravel-5.1

您好,我对 Laravel 4.2Laravel 5.1 使用相同的脚本,问题出在 Laravel 4.2 完美工作,但在 Laravel 5.1 上我无法理解为什么它返回错误结果

问题是为什么我在 Laravel 5.1 中得到 $request->ajax() false ?

路线.php

Route::post('/upload-image', [
    'as' => 'upload-image-post',
    'uses' => 'PageController@profileImage'
]);

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());
    }

}

upload-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]); 
                }

            }   
        }
    });
});

上传图片.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,则此代码需要从“{!! .. !!}”更改为“{{ .. }}”

最佳答案

我认为这个问题不是由 Laravel 版本引起的。 Laravel 源代码显示,ajax() 调用被传播到 Symfony's request component 。 5 年前,这个来源发生了很大的变化。

您应该跟踪在这两种情况下 X-Requested-With header 是否发送到您的应用程序。您还可以将断点设置为 Symfony\Component\HttpFoundation\Request::isXmlHttpRequest() 并查看 header 中的内容。

关于ajax - laravel 5.1 请求::ajax 返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33813628/

相关文章:

laravel - 将 hasOne 模型附加到另一个 Laravel/Eloquent 模型而不指定 id

php - Laravel 的 ajax 演示,一步一步

Laravel 将数据透视表附加到具有多个值的表

php - Laravel日期未插入数据库表中

php - 数据不通过 AJAX

javascript - Firefox 在 .NET 中提前记住文本框值

asp.net - 当子页面关闭时,是否可以在父页面上调用服务器端事件?

java - 无法从servlet获取传递的数据

Laravel 可选的 Url Slug 更正

php - Doctrine 前缀可嵌入