jQuery无法更新我的全局变量

jQuery无法更新我的全局变量,jquery,laravel,laravel-5,laravel-5.3,Jquery,Laravel,Laravel 5,Laravel 5.3,我有一个功能,用于在选项卡之间导航,还可以提交表单。后端验证工作正常,但如果用户输入无效,我将全局变量isValid设置为false。我现在只验证一个表单,因此使用data.isValid 我的Jquery代码 var tabID, relatedTabID, isValid=true; $('#form').on('submit', function (e) { var formData = $('#form').serialize(); e.preventDefault()

我有一个功能,用于在选项卡之间导航,还可以提交表单。后端验证工作正常,但如果用户输入无效,我将全局变量isValid设置为false。我现在只验证一个表单,因此使用data.isValid

我的Jquery代码

var tabID, relatedTabID, isValid=true;

$('#form').on('submit', function (e) {
    var formData = $('#form').serialize();
    e.preventDefault();
    $.ajaxSetup({
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        }
    });
    $.ajax({
        type: 'POST',
        url: '/roa',
        dataType: 'json',
        data: {inputs: formData, nextTab: relatedTabID, currentTab: tabID}, //also need to pass in related Tab ID, and also tabID
        success: function (data) {
            if (data.value===1){
                if (data.isValid){//if data is valid, return next view
                    $('#tabShow').html((data.view));
                    isValid=true;
                }
                else{//if it isn't target the div id=erros and replace only error section

                    isValid=false;
                    var x=jQuery.parseJSON(data.msg);
                    var errorString = '';
                    $.each( x.errors, function( key, value) {
                        errorString += "<li class='alert alert-danger'>" + value + '</li>';
                    });
                    alert(errorString);
                    $('.something').html(errorString);
                    return false;//prevent navigation
                }
            }
            else{
            $('#tabShow').html((data.view));}
        },
        error: function () {
            alert('error');
        }
    });
});

$(document).on('hide.bs.tab', '.nav-pills a', function (e) {

    tabID = $(e.target).attr('id');
    relatedTabID = $(e.relatedTarget).attr('id');
    $('#form').submit();
    alert(isValid);
    if (tabID==='section2'){
        return false;
    }

});
Route::post('/roa', function() {
$m = Request::except('_token');
$name = "form1_sections/" . $m['nextTab'] . "_form";//next view name
$name2 = "form1_sections/" . $m['currentTab'] . "_form";//current view name

parse_str($m['inputs'], $output);
$type= gettype($output);
if ($m['currentTab']=='section2'){//only validation for section2
    $rules = [
        'TB1_course.*' => 'required'
    ];
    $validator=Validator::make($output, $rules);
    if ($validator->passes()){
        return ["view" => view("$name")-> render(), "value"=>1, "type"=>$type, "isValid"=>true];
    }
    return ["view" => view("$name2")->withErrors($validator) -> render(), "value"=>1, "type"=>$type, "isValid"=>false, "msg"=>json_encode([
        'errors' => $validator->errors()->getMessages(),
        'code' => 422
     ])];
}
return ["view" => view("$name") -> render()];
});

即使检测到错误,也应返回值false。如果验证不正确,我想停止导航。值得注意的一件有趣的事情是,isValid返回true,即使在我显示错误时也是如此,但在这之后,如果我尝试在其他地方导航,它将返回false。有什么建议吗?

您确定您的else已触发吗?如果是,您可能希望为全局变量声明一个对象并访问它

然后使用全局对象访问它您的问题可能是js中的作用域

Global.isValid = false;

Yea my else语句被触发,但在警报之后(isValid)。如果我在else语句中发出警报(它首先发出警报(isValid)),然后在else语句中发出警报,而它应该做相反的事情。我在某个地方读到,这是因为jquery没有按时间顺序执行ajax。但我不知道如何解决这个问题。
Global.isValid = false;