I am trying to retrieve data from a JSDO. jsdo.hasData() returns true, but this statement returns errors:
jsdo.foreach(function (jsrecord) {
document.getElementById(descField).value = jsdo.jsrecord.data.descField;
In Chrome I get:
Uncaught TypeError: Cannot read property 'data' of undefined(anonymous function) @ EmpStarter.html:981
progress.data.JSTableRef.foreach @ progress.all.4.0.min.js:18
progress.data.JSDO.foreach @ progress.all.4.0.min.js:18
onAfterFill @ EmpStarter.html:980
b.Callbacks.c @ jquery.min.js:3
b.Callbacks.p.fireWith @ jquery.min.js:3
b.extend.Deferred.b.each.i.(anonymous function) @ jquery.min.js:3
progress.data.JSDO._fillComplete @ progress.all.4.0.min.js:18
progress.data.JSDO.onReadyStateChangeGeneric @ progress.all.4.0.min.js:18
If I use the progress.js (not the min) from GitHub, I get:
Uncaught TypeError: Cannot read property 'Observable' of undefined
EmpStarter.html:928 Uncaught TypeError: undefined is not a function
This is in a function that ultimately calls the function above.
Thoughts?
jsrecord.data[descField] if descField is a variable that holds the field name you want
Hello,
Thank you for the additional information. This info explains the code in the first post.
What about referring to the variable using square brackets?
Example:
document.getElementById(descField).value = jsdo.jsrecord.data[ descField ]
Realised where the error is: jsdo.jsrecord.data should be jsrecord.data
Unfortunately, that returns undefined. Any ideas as to why?
Hello,
The foreach method loops through the records in the JSDO memory. Internally, this is maintained in an array, you can access it for debugging using jsdo.<tableRef>._data, you could also use jsdo.getData() using the API.
jsrecord.data undefined, could mean that even though the array has elements, the items are not valid.
Could you take a look at the output from _data?
BTW, to debug, use progress.all.js which combines several files . You could also use progress.js but you would need to include the other files.
I hope this helps.
Thanks for the tip on using progress.all.js.
Output from _data:
[Object]0: Object SexCode: "M" SexDescription: "Male" _id: "1436887777049-1"
Which is what I am expecting.
Found out what the issue is - it doesn't like using a variable for the field that I am looking for. If I use the actual field name then it works just fine.
Any ideas on how to use a variable, as I need this function to be as generic as possible?
Hello,
Thank you for the additional information. This info explains the code in the first post.
What about referring to the variable using square brackets?
Example:
document.getElementById(descField).value = jsdo.jsrecord.data[ descField ]
jsrecord.data[descField] if descField is a variable that holds the field name you want
Thanks you both - that has indeed fixed the issue.