vote up 1 vote down star

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 ?

flag

71% accept rate
It's not clear what you mean... can you post more sample code? The actual array contents and the redirect call would be very helpful. – Dylan Beattie Oct 8 '08 at 12:14

4 Answers

vote up 2 vote down

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.

link|flag
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 Oct 8 '08 at 12:23
vote up 2 vote down

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]).

link|flag
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 Oct 8 '08 at 15:58
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 Oct 8 '08 at 18:27
vote up 1 vote down
eval('(' + jsonObject + ')')
link|flag
eval is only a safe way to decode JSON data if you 100% trust your source :D – olliej Oct 8 '08 at 20:20
vote up 0 vote down

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

var url = myArray[i]();
link|flag

Your Answer

Get an OpenID
or
never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.