views:

28097

answers:

4

I have a JavaScript array that, among others, contains a URL. If I try to simply put the URL in the page (the array is in a project involving the Yahoo! Maps API) it shows the URL as it should be.

But if I try to do a redirect or simply do an 'alert' on the link array element I get:

function(){return JSON.encode(this);}

As far as I see it this is because the browser does an JSON.encode when it renders the page, thus the link is displayed OK. I have tried several methods to make it redirect (that's what I want to do with the link) correctly (including the usage of 'eval') but with no luck.

After following some suggestions I've run eval('(' + jsonObject + ')') but it still returns the same output.

So how's this done ?

+2  A: 

JSON decoding in JavaScript is simply an eval() if you trust the string or the more safe code you can find on http://json.org if you don't.

You will then have a JavaScript datastructure that you can traverse for the data you need.

Lou Franco
As I was saying I tried to 'eval' the link element but then it returned 'undefined'. The data in the array comes form parsing a XML, do you think that it can have something to do with that ?
Brayn
+2  A: 

If you get this text in an alert:

function(){return JSON.encode(this);}

when you try alert(myArray[i]), then there are a few possibilities:

  • myArray[i] is a function (most likely)
  • myArray[i] is the literal string "function(){return JSON.encode(this);}"
  • myArray[i] has a .toString() method that returns that function or that string. This is the least likely of the three.

The simplest way to tell would be to check typeof(myArray[i]).

Joel Anair
I doubt it that is a literal string. Most likely is a function. I have tried to "eval('(' + jsonObject + ')')" but still it returns the same output as before...
Brayn
Yeah, would imagine that passing a function to eval() would call that function's toString method, returning a string that would eval back to that function itself. So that makes sense.
Joel Anair
+1  A: 
eval('(' + jsonObject + ')')
Kon
eval is only a safe way to decode JSON data if you 100% trust your source :D
olliej
A: 

If the object element you get is a function, you can try this:

var url = myArray[i]();
Leonel Martins