I the following PHP code:
echo "<img src='../images/edit.png' onclick='showEditDiv(" . json_encode($row) . ");'>";
Here is the HTML result:
<img src='../images/edit.png' onclick='showEditDiv({"ID":"2","NAME":"John Smith","EMAIL":"[email protected]"});'>
And here is the Javascript code:
function showEditDiv(data) {
alert(data);
data = JSON.parse(data);
alert(data);
for (i=0; i< data.length; i++){
alert(data[i]);
};
}
The problem is I'm not getting the desired array in the JS parameter. The first alert shows "[object Object]" and that's all, no more alerts. Where is the problem? My code is based on the examples I found here. All I want is to pass an array to JS function, which is in a separated .js file. I don't want to use JQuery, prefer native JS.
You aren't passing JSON to the function (JSON would be a string, hence ending/beginning with quotes). What you're passing is a JavaScript object literal. See the difference:
{"ID":"2","NAME":"John Smith","EMAIL":"[email protected]"}
"{\"ID\":\"2\",\"NAME\":\"John Smith\",\"EMAIL\":\"[email protected]\"}\"
// or, easier than escaping all those quotes..
'{"ID":"2","NAME":"John Smith","EMAIL":"[email protected]"}'
Of course, for your purposes, the object literal may be easier to work with. In that case you just need to remove the JSON.parse
from your JavaScript code:
function showEditDiv(data) {
// The below won't work unless you change your input data to a
// JS array literal..
/* for (i=0; i< data.length; i++){
alert(data[i]);
}; */
// ..but you can do this (though it's risky to iterate through keys
// on an object without at least using HasOwnProperty)
for (var key in data) {
alert(data[key]);
}
}
All I want is to pass an array to JS function
That's an object in JS, not an array. (PHP nomenclature is a bit weird.) And you have successfully passed it. However, when you convert an object into a string (which is what alert
has to do), it shows up as [object Object]
. If you want the string representation, convert it back into a string:
alert(JSON.stringify(data));
You don't need to JSON.parse
it, since it already is an object - you have inserted it as a literal from PHP, not as a string. In fact, running JSON.parse
in your code should cause an error, which is why no more alerts - code stops, complaining about bad taste in JSON.parse
's mouth.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With