jQuery无法更新我的全局变量

时间:2017-06-08 14:43:13

标签: 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();
    $.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;
    }

});

我的功能$(文件).on(&#39; hide.bs.tab&#39;,&#39; .nav-pills a&#39;,功能(e)无法检测到我的全局变量isValid。我真的不明白这里的问题。

我的后端代码

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。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

你知道你的其他人被触发了吗?如果是,您可能希望为全局变量执行此操作,声明对象并访问它。

var Global = {
     isValid = true
///put all your Global variable here
}

然后使用Global对象访问它,你的问题可能是js中的范围

Global.isValid = false;