ServiceNow:コールバック関数でonSubmitを呼び出すと、無限ループが発生します

スニール・クマー・シン

ここでは、日付start_dateとend_dateの2つの変数を比較し、end_dateがstart_dateより大きい場合にのみフォームの送信を許可します。それ以外の場合は、フォームの送信を拒否しますが、このコードの実行中に、無限ループに入ります。 getXML(checkDateDiff)の代わりにgetXMLWait()を使用することによるこの非同期は、モバイルAPIではサポートされていません。

また、日付の比較に役立つクライアントスクリプトはたくさんありますが、モバイルAPIではサポートされていません。

以下のコードを見て助けてください!!!!

function onSubmit() {
    var requestType = g_form.getValue('request_type');
    if (requestType == 'mifi') {
        console.log("calling validateTravelEndDate()");
        validateTravelEndDate();
        return false;
    } else
        return true;
}

//Helper function which calls a AJAX script include called "ClientDateTimeUtils" which gives the response in a callback where i am deciding whether to submit the form or not based on the status of days result.

function validateTravelEndDate() {
    var startDate = g_form.getValue('travel_start'); //First Date/Time field
    var endDate = g_form.getValue('travel_end'); //Second Date/Time field
    var dttype = 'day'; //this can be day, hour, minute, second. By default it will return seconds.
    console.log("startDate :" + startDate + "endDate :" + endDate);
    var ajax = new GlideAjax('ClientDateTimeUtils'); // This is the script include which can be used for date validation.
    ajax.addParam('sysparm_name', 'getDateTimeDiff');
    ajax.addParam('sysparm_fdt', startDate);
    ajax.addParam('sysparm_sdt', endDate);
    ajax.addParam('sysparm_difftype', dttype);
    console.log("before " + g_form.getValue('travel_end'));
    ajax.getXML(checkDateDiff);
}

// callback function where deciding to go ahead or not with form submission.
function checkDateDiff(response) {
    var answer = response.responseXML.documentElement.getAttribute("answer");
console.log("difference in days:" + answer);
    if (answer <= 0) {
        alert("Travel End date must be after Travel Start date.");
        g_form.setValue('travel_end', '');
        g_form.showFieldMsg('travel_end', 'Please provide a future date', 'error');
       return false;
 } else {
      console.log("%%%%%%%%%%%%%%% Calling g_form.submit()");
      g_form.submit(); // This has some issue as it’s going in the infinite loop and if we just return true/false from here as it’s asynchronous call , it’s not handled by the onSubmit function
  }
}
スティーブソチャ

あなたのonSubmit()関数は常に返すfalseためにmifi要求。onSubmit()関数は、を返すときに、より安全な送信を実行できtrueます。また、g_formコールバック関数はサーバー上で実行されるため、関数を実行することはできません。

関数g_form.submit()の最後にを付けるのではなく、関数にを返します。checkDateDiffonSubmit()true

このようなものが機能するはずです。変更したすべての行にコメントしました。

function onSubmit() {
    var requestType = g_form.getValue('request_type');
    if (requestType == 'mifi') {
        console.log("calling validateTravelEndDate()");

        // **CHANGED CODE: instead of g_form.submit(), this will return true
        if(validateTravelEndDate()){
            return true;
        }
        else{
            return false;
        }

    } else
        return true;
}

//Helper function which calls a AJAX script include called "ClientDateTimeUtils" which gives the response in a callback where i am deciding whether to submit the form or not based on the status of days result.

function validateTravelEndDate() {
    var startDate = g_form.getValue('travel_start'); //First Date/Time field
    var endDate = g_form.getValue('travel_end'); //Second Date/Time field
    var dttype = 'day'; //this can be day, hour, minute, second. By default it will return seconds.
    console.log("startDate :" + startDate + "endDate :" + endDate);
    var ajax = new GlideAjax('ClientDateTimeUtils'); // This is the script include which can be used for date validation.
    ajax.addParam('sysparm_name', 'getDateTimeDiff');
    ajax.addParam('sysparm_fdt', startDate);
    ajax.addParam('sysparm_sdt', endDate);
    ajax.addParam('sysparm_difftype', dttype);
    console.log("before " + g_form.getValue('travel_end'));

    // **CHANGED CODE: validateTravelEndDate returns the callback value
    return ajax.getXML(checkDateDiff);
}

// callback function where deciding to go ahead or not with form submission.
function checkDateDiff(response) {
    var answer = response.responseXML.documentElement.getAttribute("answer");
    console.log("difference in days:" + answer);
    if (answer <= 0) {
        alert("Travel End date must be after Travel Start date.");
        g_form.setValue('travel_end', '');
        g_form.showFieldMsg('travel_end', 'Please provide a future date', 'error');
        return false;
    }
    else {
    // **CHANGED CODE: checkDateDiff will return true
        return true;
    }
}

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

useStateフックがmap関数内で呼び出され、無限ループが発生します

分類Dev

whileループから関数を呼び出すと、無限ループが発生します

分類Dev

子関数コンポーネントを使用してsetState()を呼び出すと、無限ループが発生します

分類Dev

コールバックを使用して関数を複数回連続して呼び出すと、コールバック地獄が発生します

分類Dev

SwiftUI:EnvironmentObjectを変更するビュー本体で関数を呼び出すと、無限ループが発生し、アプリがクラッシュします

分類Dev

React:パラメータを使用して関数を呼び出すと無限ループが発生します

分類Dev

関数呼び出し後にAjaxコールバックが発生しています

分類Dev

無効なフック呼び出し。フックは関数コンポーネントの本体内でのみ呼び出すことができ、関数呼び出しを行うときにこのエラーが発生します

分類Dev

JavaScriptで無限ループや再帰呼び出しが発生したときにJavaScriptをデバッグする方法は?

分類Dev

2つのネストされたサブクラスでsuper.viewDidLoad()を呼び出すと、Swiftで無限ループが発生します

分類Dev

単純なAJAXWebMethodを呼び出すと、常に「失敗」のコールバックが発生します

分類Dev

同じ関数内で関数の名前を使用すると、無限ループが発生しますか?

分類Dev

「コマンド」なしでcd(シェル関数)からcd(組み込み)を呼び出すと、無限ループが発生するのはなぜですか?

分類Dev

forループで関数を呼び出そうとして、未使用の引数エラーが発生する

分類Dev

メンバー関数への関数ポインタを呼び出そうとすると、コンパイルエラーが発生しました

分類Dev

コールバックはすでに呼び出されました!ループバック、updateAll関数で

分類Dev

Railsのビューでモデル関数を呼び出すとエラーが発生します

分類Dev

Angular 6:HttpInterceptorからserviceobserver.nextを呼び出すと、無限のリクエストループが発生します

分類Dev

JavaScript でコールバック引数を呼び出しているときにエラーが発生する

分類Dev

socket.io匿名コールバック:クラス関数を呼び出すことができません

分類Dev

非同期関数でResultを呼び出すと、ブロックが無期限に発生しますか?

分類Dev

node-fs-extra関数copySync()の呼び出し中に無効なコールバックエラーが発生しました

分類Dev

ng-repeat / ng-classが$ httpを呼び出す関数を呼び出すときの無限ループ

分類Dev

pyaudioは、コールバック関数を呼び出すサンプルの数を変更します

分類Dev

バックプレスでviewpagerフラグメントをコールバックすると、このエラーが発生します。最初に子の親でremoveView()を呼び出す必要があります

分類Dev

小道具でコールバック関数を呼び出す

分類Dev

コールバック関数で__doPostBackを呼び出す方法

分類Dev

ロボットでPython関数をキーワードとして実行すると、無限ループが発生します

分類Dev

ティックを宣言し、ティック関数を登録すると、無限ループが発生します

Related 関連記事

  1. 1

    useStateフックがmap関数内で呼び出され、無限ループが発生します

  2. 2

    whileループから関数を呼び出すと、無限ループが発生します

  3. 3

    子関数コンポーネントを使用してsetState()を呼び出すと、無限ループが発生します

  4. 4

    コールバックを使用して関数を複数回連続して呼び出すと、コールバック地獄が発生します

  5. 5

    SwiftUI:EnvironmentObjectを変更するビュー本体で関数を呼び出すと、無限ループが発生し、アプリがクラッシュします

  6. 6

    React:パラメータを使用して関数を呼び出すと無限ループが発生します

  7. 7

    関数呼び出し後にAjaxコールバックが発生しています

  8. 8

    無効なフック呼び出し。フックは関数コンポーネントの本体内でのみ呼び出すことができ、関数呼び出しを行うときにこのエラーが発生します

  9. 9

    JavaScriptで無限ループや再帰呼び出しが発生したときにJavaScriptをデバッグする方法は?

  10. 10

    2つのネストされたサブクラスでsuper.viewDidLoad()を呼び出すと、Swiftで無限ループが発生します

  11. 11

    単純なAJAXWebMethodを呼び出すと、常に「失敗」のコールバックが発生します

  12. 12

    同じ関数内で関数の名前を使用すると、無限ループが発生しますか?

  13. 13

    「コマンド」なしでcd(シェル関数)からcd(組み込み)を呼び出すと、無限ループが発生するのはなぜですか?

  14. 14

    forループで関数を呼び出そうとして、未使用の引数エラーが発生する

  15. 15

    メンバー関数への関数ポインタを呼び出そうとすると、コンパイルエラーが発生しました

  16. 16

    コールバックはすでに呼び出されました!ループバック、updateAll関数で

  17. 17

    Railsのビューでモデル関数を呼び出すとエラーが発生します

  18. 18

    Angular 6:HttpInterceptorからserviceobserver.nextを呼び出すと、無限のリクエストループが発生します

  19. 19

    JavaScript でコールバック引数を呼び出しているときにエラーが発生する

  20. 20

    socket.io匿名コールバック:クラス関数を呼び出すことができません

  21. 21

    非同期関数でResultを呼び出すと、ブロックが無期限に発生しますか?

  22. 22

    node-fs-extra関数copySync()の呼び出し中に無効なコールバックエラーが発生しました

  23. 23

    ng-repeat / ng-classが$ httpを呼び出す関数を呼び出すときの無限ループ

  24. 24

    pyaudioは、コールバック関数を呼び出すサンプルの数を変更します

  25. 25

    バックプレスでviewpagerフラグメントをコールバックすると、このエラーが発生します。最初に子の親でremoveView()を呼び出す必要があります

  26. 26

    小道具でコールバック関数を呼び出す

  27. 27

    コールバック関数で__doPostBackを呼び出す方法

  28. 28

    ロボットでPython関数をキーワードとして実行すると、無限ループが発生します

  29. 29

    ティックを宣言し、ティック関数を登録すると、無限ループが発生します

ホットタグ

アーカイブ