0

我正在使用 ServiceNow。我需要在提交时验证表单。我正在使用带有脚本的 GlideAjax 来验证数据。如何将变量从 Ajax 函数calendarDate(response)传递到客户端脚本中的其他函数?当 glide ajax 函数返回错误消息时,我想将变量“isValid”设置为 false。

我使用不涉及 GlideAjax 的客户端脚本很容易做到这一点。我只是将变量 isValid 设置为函数的结果,例如 var isValid = checkLnrDates();

但是,在使用 GlideAjax 时设置一个等于函数调用的变量不会返回任何我可以使用的值。我可能不理解调用和处理 GlideAjax 函数的方式。

目录客户端脚本 onSubmit

function onSubmit () {
  var isValid = checkLnrDates();
  if (isValid == false) {
  g_form.submitted = false;
  return false;
  }
}


function checkLnrDates() {
  var start = g_form.getValue('start_date');
  //Check calendar date format valid YYYY-MM-DD
  //Script include ClientDateTimeUtils checks the input data
  var ajaxCalendarDate = new GlideAjax('ClientDateTimeUtils');
  ajaxCalendarDate.addParam('sysparm_name', 'validateCalendarDate');
  ajaxCalendarDate.addParam('sysparm_userDate', start);
  ajaxCalendarDate.getXML(calendarDate);
}


function calendarDate(response){
  //This is where we get the response returned from the ClientDateTimeUtils script include ajax function
  var answer = response.responseXML.documentElement.getAttribute("answer"); 
  if (answer != 'true'){
  g_form.showFieldMsg('start_date', answer,'error');
  //How can I pass the value of a variable to the function above? I want to set isValid to false
isValid = false; 
return false;
  }
  }
4

2 回答 2

1

试试这个:

    function onSubmit(){
      checkLnrDates();
      return false;
    }


    function checkLnrDates() {
      var start = g_form.getValue('start_date');
      //Check calendar date format valid YYYY-MM-DD
      //Script include ClientDateTimeUtils checks the input data
      var ajaxCalendarDate = new GlideAjax('ClientDateTimeUtils');
      ajaxCalendarDate.addParam('sysparm_name', 'validateCalendarDate');
      ajaxCalendarDate.addParam('sysparm_userDate', start);
      ajaxCalendarDate.getXML(calendarDate);
    }


    function calendarDate(response){
      //This is where we get the response returned from the ClientDateTimeUtils script include ajax function
      var answer = response.responseXML.documentElement.getAttribute("answer"); 
      if (answer != 'true'){
          g_form.showFieldMsg('start_date', answer,'error');
         return false;
      }
      else
        g_form.submit();
 }
于 2015-06-03T20:19:12.303 回答
1

在继续之前您需要从 AJAX 往返中获得响应这一事实意味着您实际上并不是异步的。您可能只需调用ajaxCalendarDate.getXMLWait()然后调用ajaxCalendarDate.getAnswer()以同步获取响应(请参阅Synchronous GlideAjax

但是,由于您已经提交,并且您的代码依赖于服务器端函数调用来验证某些输入,您可能只考虑将此逻辑移动到插入前业务规则中,该规则将current.setAbortAction(true)在验证失败时进行验证并中止使用。维基示例在这里

您的业​​务规则如下所示:

function onBefore(current, previous) {
  if (!CliendDateTimeUtils.validateCalendarDate(current.start_date)) {
    current.setAbortAction(true); // Don't save the record
    gs.addErrorMessage("Start date is not valid"); // Add an error message for the user
  }
}
于 2015-06-03T20:32:51.013 回答