jQuery无法更新我的全局变量
我有一个功能,用于在选项卡之间导航,还可以提交表单。后端验证工作正常,但如果用户输入无效,我将全局变量isValid设置为false。我现在只验证一个表单,因此使用data.isValid 我的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()
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;