Reputation: 3170
I have two files, one containing an array in PHP that is echo
ed via json_encode, and the other full of javascript functions for a webpage. One such function, that looks like this (and is unfinished):
/*
* Function: selectVictim
* Called from function laserOn()
*
* Selects a random victim from a list of victims
*
* @return String: victim
*/
function selectVictim()
{
var params = "url=queenofsheep.com/Sheep/victims.php";
var request = new ajaxRequest();
request.open("POST", "victims.php", true);
request.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
request.setRequestHeader("Content-Length", params.length);
request.setRequestHeader("Connection", "close");
request.onreadystatechange = function ()
{
if (this.readyState == 4)
{
if (this.status == 200)
{
if (this.responseText != null )
{
var vicString = this.responseText;
var vicArray = eval('"'+vicString+'"');
//var vicArray = vicString.split(',');
//var numVic = Math.floor(Math.random() * (vicArray - 1));
alert(vicArray);
}
else alert("Ajax error: No data received");
}
else alert("Ajax Error: " + this.statusText);
}
}
request.send(params);
}
Is supposed to take in the array from the other file and do things to it that are beyond the scope of this question. Unfortunately, while this.responseText
contains a JSON encoded array of the format
var jsonArr =
["1","2,","3"]
activating the function does nothing, and eval
ing this.responseText
yields "undefined."
What am I doing wrong here? I can provide more examples of the real code, the actual array, whatever, if need be. This is driving me crazy.
Upvotes: 0
Views: 2202
Reputation: 75
Set the content type of the response in the server to "application/json" and you won't have to use eval anymore.
Also you would be better of using an ajax framework instead of using your own ajax functions.
Upvotes: 0
Reputation: 66405
Use request
instead of this
. this
refers to the window
object.
Edit: if var jsonArr=[1, 2, 3];
is literally the response, you should use eval(vicString+';jsonArr');
if you can't alter the response text.
If you'd run 'eval("var test=[1,2,3];")', you'ld have seen that it indeed returns undefined. But this isn't a good practice in using JSON.
Upvotes: 1
Reputation: 29160
Try adding "(" and ")" to the Eval Function. That's how I've seen it done in the past
var myObject = eval('(' + vicString + ')');
Upvotes: 3