Getting Unhandled exception in GlideAjax error.

vinuth v
Tera Expert

Hi All,

 

I am working on the one of the form, in this I need to populate the Requested For user email id and phone number.

 

For this I wrote Client script and Script Include:

Client script:

function onChange(control, oldValue, newValue, isLoading) {
   if (isLoading || newValue == '') {
      return;
   }
   //var req=g_form.getValue('requested_for_user');
   var ga = new GlideAjax('testdetails');
   ga.addParam('sysparam_name','userdetails');
   ga.addParam('sysparam_reqname',g_form.getValue('requested_for_user'));
   ga.getXML(displayuservalue);

   function displayuservalue(response){
    var answer=response.responseXML.documentElement.getAttribute('answer');
    var result=JSON.parse(answer);

    g_form.setValue('email_user',result.email);
    g_form.setValue('phone_number_of_user',result.phone);
   }

   //Type appropriate comment here, and begin script below
   
}
 
Script Include:
var testdetails = Class.create();
testdetails.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    userdetails: function() {
        var sys_id = this.getParameter('sysparam_reqname');
        var gr = new GlideRecord('sys_user');
        gr.get(sys_id);
        var userObj = {};
        userObj.email = gr.email.toString();
        userObj.phone = gr.phone.toString();
        return JSON.stringify(userObj);
    },

    type: 'testdetails'
});
 
I am getting like this "sp_min.jsx?v=07-12-2024_0853:2984 Unhandled exception in GlideAjax." 
The script is not working as expected, I am getting this error.
 
Thanks in adavance,
Vinuth

 

3 REPLIES 3

Sandeep Rajput
Tera Patron
Tera Patron

@vinuth v Please update your client script and script include as follows.

 

Client Script:

function onChange(control, oldValue, newValue, isLoading) {
   if (isLoading || newValue == '') {
      return;
   }
   //var req=g_form.getValue('requested_for_user');
   var ga = new GlideAjax('testdetails');
   ga.addParam('sysparm_name','userdetails');
   ga.addParam('sysparm_reqname',g_form.getValue('requested_for_user'));
   ga.getXML(displayuservalue);

   function displayuservalue(response){
    var answer=response.responseXML.documentElement.getAttribute('answer');
    var result=JSON.parse(answer);

    g_form.setValue('email_user',result.email);
    g_form.setValue('phone_number_of_user',result.phone);
   }

   //Type appropriate comment here, and begin script below
   
}

 

Script Include:

var testdetails = Class.create();
testdetails.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    userdetails: function() {
        var sys_id = this.getParameter('sysparm_reqname');
        var gr = new GlideRecord('sys_user');
        gr.get(sys_id);
        var userObj = {};
        userObj.email = gr.email.toString();
        userObj.phone = gr.phone.toString();
        return JSON.stringify(userObj);
    },

    type: 'testdetails'
});

 

In your script your wrote 

sysparm

as 

sysparam

 

Due to which the script was failing. For more information on syntax please refer to https://docs.servicenow.com/bundle/washingtondc-api-reference/page/app-store/dev_portal/API_referenc...

 

Hope this helps.

Satishkumar B
Giga Sage
Giga Sage

@vinuth v 

1. Script Include:

Ensure the Script Include is client-callable by checking the "Client Callable" checkbox in the Script Include definition.

 

 

var testdetails = Class.create();
testdetails.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    userdetails: function() {
        var sys_id = this.getParameter('sysparam_reqname');
        var userObj = {};

        var gr = new GlideRecord('sys_user');
        if (gr.get(sys_id)) {
            userObj.email = gr.email.toString();
            userObj.phone = gr.phone.toString();
        } else {
            userObj.error = "User not found";
        }

        return JSON.stringify(userObj);
    },

    type: 'testdetails'
});

 

 

2. Client Script:

Make sure that the g_form.getValue('requested_for_user') actually returns a valid sys_id. If it doesn't, the Script Include won't be able to find the corresponding record.

 

 

function onChange(control, oldValue, newValue, isLoading) {
    if (isLoading || newValue == '') {
        return;
    }

    var ga = new GlideAjax('testdetails');
    ga.addParam('sysparam_name', 'userdetails');
    ga.addParam('sysparam_reqname', g_form.getValue('requested_for_user'));

    ga.getXMLAnswer(function(response) {
        if (!response) {
            gs.addErrorMessage("No response from server.");
            return;
        }

        try {
            var result = JSON.parse(response);
            if (result.error) {
                gs.addErrorMessage("Error: " + result.error);
            } else {
                g_form.setValue('email_user', result.email || '');
                g_form.setValue('phone_number_of_user', result.phone || '');
            }
        } catch (e) {
            gs.addErrorMessage("Failed to parse response: " + e.message);
        }
    });
}

 

 

 

…………………………………………........................................................................................
Please Mark it helpful 👍and Accept Solution ✔️!! If this helps you to understand!!

………………………………………….......................................................................................

Community Alums
Not applicable

Hi @vinuth v ,

I tried your problem in my PDI and it works for me please check below script 

Client script 

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
    if (isLoading || newValue === '') {
        return;
    }

    //Type appropriate comment here, and begin script below
    var ga = new GlideAjax('testdetails');
    ga.addParam('sysparm_name', 'userdetails');
    ga.addParam('sysparm_reqname', g_form.getValue('assigned_to'));
    ga.getXML(displayuservalue);

    function displayuservalue(response) {
        var answer = response.responseXML.documentElement.getAttribute('answer');
        var result = JSON.parse(answer);

        // g_form.setValue('email_user', result.email);
        alert("Rsult = " + result.phone)
        g_form.setValue('email_user', result.email);
        g_form.setValue('phone_number_of_user', result.phone);
        g_form.update();
    }


}

 

Script Include

var testdetails = Class.create();
testdetails.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    userdetails: function() {
        var sys_id = this.getParameter('sysparm_reqname');
		gs.log("sys_id = " + sys_id);
        var gr = new GlideRecord('sys_user');
        gr.get(sys_id);
        var userObj = {};
        userObj.email = gr.email.toString();
        userObj.phone = gr.phone.toString();
		gs.log("JSON.stringify(userObj) = " + JSON.stringify(userObj));
        return JSON.stringify(userObj);
    },


    type: 'testdetails'
});

 

Please mark my answer correct and helpful if this works for you

Thanks and Regards 

Sarthak