Yes.  If your JSON is in the response body, you will have to evaluate it 
yourself.  It must be the framework you're using which is creating the 
X-JSON header, perhaps?  For example:

new Ajax.Request("some_page.php", {
    parameters: {id: 6},
    onComplete: function(xhr) {
       var json = xhr.responseText.evalJSON(true);
       /* ... do something else ... */
    }
});

You're responseText should then be valid JSON.  For more information, 
see http://prototypejs.org/api/string/evaljson.

 - Dash -

Stephan Ellis wrote:
> Dash,
>   Thanks for the reply.  Are you saying that I have to evaluate the
> reponseText myself if the JSON is in the response body?  I configured my
> application to not send the X-JSON header, but prototype is still not
> evaluating the response body.
>
> Thanks,
> -stephan
>
> On 5/21/07, David Dashifen Kees <[EMAIL PROTECTED]> wrote:
>   
>> The problem is how you're sending information in the X-JSON header.
>> Prototype will try to automatically evaluate anything in the X-JSON
>> header assuming that it is a JSON string.  You're X-JSON header is not a
>> JSON string but rather another call to eval() so the internal Prototype
>> String.evalJSON() function is probably your failure point.
>>
>> Instead, either make "var json = transport.responseText.evalJSON(true)"
>> the first line of your callback function, or make sure that your X-JSON
>> header is *only* a JSON string.
>>
>> Also, you should be aware that Prototype 1.5.1 added security features
>> to help avoid the execution of JSON with invalid code or malicious code
>> within it.  As a result, JSON created and passed around by prototype has
>> /*-secure- before your JSON and */ after it.  If you use the
>> String.evalJSON() function to parse your information, you might need to
>> explicitly add these strings before and after your JSON to evaluate it
>> properly.
>>
>> - Dash -
>>
>> smellis wrote:
>>     
>>> Hello Everyone,
>>>
>>>   I upgraded to 1.5.1 today and I have run into a problem: automatic
>>> JSON evaluation has stopped working.  On the server side I use
>>> Catalyst, an MVC framework for perl.  I use Catalyst::View::JSON to
>>> turn my perl data structures in to JSON.  Here is what my response
>>> headers look like:
>>>
>>> Response Headers
>>> Connection    close
>>> Date  Mon, 21 May 2007 15:12:54 GMT
>>> Content-Length        984
>>> Content-Type  application/javascript; charset=utf-8
>>> Set-Cookie    bg2_session=5279b9253f970f84dd032ec4a00ba2a34dcff66c;
>>> path=/; expires=Mon, 21-May-2007 17:12:54 GMT
>>> Status        200
>>> X-Catalyst    5.7007
>>> X-JSON        eval("("+this.transport.responseText+")")
>>>
>>> The JSON is actually in the response body.  I had to subclassed my
>>> JSON view to spit out application/javascript, because the default
>>> content-type (application/json) is not listed in the prototype
>>> documentation as one that will cause prototype to auto evaluate the
>>> reponse.  I have tried turning off the X-JSON header to see if that
>>> was a problem, but it still doesn't work.  Any ideas?  Thanks in
>>> advance. -stephan
>>>
>>>
>>>       
>>>       
>
> >
>
>   

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Spinoffs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-spinoffs?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to