Client Script returning null

Siddhesh Gawade
Mega Sage
Mega Sage

Hello Experts,

 

I have created a onchnage Client script to retu

 

below is my script include:

 

 

var assignmentAjaxUtils = Class.create();
assignmentAjaxUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {

    getAssignmentDetails: function(){

        var assignment_sysId = this.getParameter("sysparm_sysId");
        gs.info("assignment_group id "+ assignment_sysId);

        var getGroup = new GlideRecord('sys_user_group');
        getGroup.addQuery('sys_id' , assignment_sysId);
        getGroup.query();
        if(getGroup.next()){

var obj = {};

obj.name = getGroup.getValue("name");
obj.description = getGroup.getValue("description");
obj.active = getGroup.getValue("active");

        }
gs.info("assignment_group obj "+ JSON.stringify(obj));

      return JSON.encode(obj); // Return JSON-encoded object

    },

    type: 'assignmentAjaxUtils'
});

 

 

 

In confirmed that obj is retuning correctly: 
script include log : 

 

 

assignment_group obj {"name":"CAB Approval","description":"CAB approvers","active":"1"}

 

Client script:

 

 

 

 

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

var assignGrp = g_form.getValue('assignment_group');

var ga = new GlideAjax('assignmentAjaxUtils');
ga.addParam('sysparm_name' , 'getAssignmentDetails');
ga.addParam('sysparm_sysId' , assignGrp);
ga.getXML(getDeatails);

function getDeatails(response){

    var answer = response.responseXML.documentElement.getAttribute('answer');
    alert(JSON.stringify(answer));

}
}
​

 

 


Any help is appreciated, Thank again!

Regards,

Siddhesh

3 REPLIES 3

ChrisBurks
Giga Sage

Hi @Siddhesh Gawade ,

 

Are you working in the Global scope or a different application scope?

If you're not working in Global scope try adding global when calling JSON.encode; ie. global.JSON.encode();

 

However, the below would work in global or scoped application with out a namespace:

...

 return JSON.stringify(obj);

...

-O-
Kilo Patron
Kilo Patron

You are using one thing to test:

JSON.stringify(obj);

but return something else, something that doesn't even exist:

return JSON.encode(obj)

You should return the same thing that what you test:

return JSON.stringify(obj);

You probably meant:

return new JSON().encode(obj);

but

return JSON.stringify(obj);

is preferred.

 

On client side you try to "stringify" something that is already "stringify"ed. You have to parse there:

console.log(JSON.parse(answer));

You don't need all the

response.responseXML.documentElement.getAttribute('answer');

stuff.
You can call getXMLAnswer instead of getXML and you will directly get answer:

ga.getXMLAnswer(getDeatails);

function getDeatails(answer) {
	console.log(JSON.parse(answer));
}

 

Juhi Poddar
Kilo Patron

Hello @Siddhesh Gawade 

Here are a few key points to remember when working with Script Includes and Client Scripts:

  1. Data returned from a Script Include is always in string format.
  2. On the client side, any data received from the Script Include will need to be handled as a string.
  3. If the Script Include returns an object converted to a string, you must parse it (e.g., using JSON.parse()) on the client side to work with the object's data.

Here is the updates script

Script include

 

var assignmentAjaxUtils = Class.create();
assignmentAjaxUtils.prototype = Object.extendsObject(AbstractAjaxProcessor, {
  getAssignmentDetails: function () {
    var assignment_sysId = this.getParameter("sysparm_sysId");
    gs.info("assignment_group id " + assignment_sysId);

    var getGroup = new GlideRecord("sys_user_group");
    getGroup.addQuery("sys_id", assignment_sysId);
    getGroup.query();
    if (getGroup.next()) {
      var obj = {};

      obj.name = getGroup.getValue("name");
      obj.description = getGroup.getValue("description");
      obj.active = getGroup.getValue("active");
    }
    return JSON.stringify(obj);
  },

  type: "assignmentAjaxUtils",
});

 

Client script:

 

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

  var assignGrp = g_form.getValue("assignment_group");

  var ga = new GlideAjax("assignmentAjaxUtils");
  ga.addParam("sysparm_name", "getAssignmentDetails");
  ga.addParam("sysparm_sysId", assignGrp);
  ga.getXML(getDeatails);

  function getDeatails(response) {
    var answer = response.responseXML.documentElement.getAttribute("answer");
    alert(JSON.parse(answer));
  }
}

 

Hope this helps!

 

"If you found my answer helpful, please like and mark it as an "accepted solution". It helps others find the solution more easily and supports the community!"

 

Thank You
Juhi Poddar