2015-06-03 4 views
0

Я пользуюсь ServiceNow. Мне нужно проверить форму onSubmit. Я использую GlideAjax со сценарием для проверки данных. Как передать переменные из функции Ajax calendarDate (response) в другие функции в скрипте клиента? Когда функция ajax для скольжения возвращает сообщение об ошибке, я хочу установить для переменной isValid значение false.ServiceNow Javascript, передавая переменные из функций GlideAjax

Я сделал это легко с помощью клиентских скриптов, которые не включают GlideAjax. Я просто устанавливаю переменную isValid в результат функции, такой как var isValid = checkLnrDates();

Однако установка переменной, равной вызову функции при использовании GlideAjax, не возвращает никакого значения, которое я могу использовать. Возможно, я не понимаю, как вызываются и обрабатываются функции GlideAjax.

Каталог Client Script 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; 
    } 
    } 

ответ

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 
    } 
} 
+0

Хорошо спасибо за совет, который я перешел на использование getXMLWait. Я проверил его с помощью ajaxCalendarDate.getAnswer(); и это позволяет мне передавать переменные из этой функции в onSubmit !!! поэтому я могу решить, следует ли отправлять форму или нет на основе этого вывода. Большое вам спасибо. – pengz

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

ServiceNow эквивалент 'document.forms [0] .submit(); 'будет' g_form.submit(); ' – Joey

+0

Да .. Я отредактируйте это –

 Смежные вопросы

  • Нет связанных вопросов^_^