OK, so let me show you (according to firebug) the response prototype
is getting from my application.

Response Headers
Connection close
Date Mon, 21 May 2007 19:54:31 GMT
Content-Length 998
Content-Type application/javascript; charset=utf-8
Set-Cookie bg2_session=5279b9253f970f84dd032ec4a00ba2a34dcff66c;
path=/; expires=Mon, 21-May-2007 21:54:31 GMT
Status 200
X-Catalyst 5.7007

Response Body
/*-secure- 
{"path_json":[],"files_json":[{"versions":1,"newest_id":64,"is_image":"y","date_added":"04-09-2007
 14:54:50","name":"Water lilies.jpg","id":59,"date_newest":"04-09-2007
14:54:50"},{"versions":1,"newest_id"
:66,"is_image":"y","date_added":"04-11-2007 15:56:15","name":"Blue
hills.jpg","id":61,"date_newest":"04-11-2007
 15:56:15"}],"folders_json":[{"folders":0,"date":"03-29-2007
19:34:16","files":0,"name":"Billy","id"
:22},{"folders":0,"date":"03-29-2007
19:34:45","files":0,"name":"Kendall","id":24},{"folders":0,"date"
:"03-29-2007 
19:35:01","files":0,"name":"Nothing","id":25},{"folders":2,"date":"03-29-2007
19:31:49"
,"files":0,"name":"DB","id":16},{"folders":1,"date":"03-29-2007
19:34:11","files":6,"name":"Angus","id"
:21},{"folders":2,"date":"03-29-2007
19:34:29","files":0,"name":"Tanya","id":23},{"folders":2,"date"
:"03-29-2007 20:34:37","files":0,"name":"Another
folder","id":56},{"folders":2,"date":"04-03-2007 15
:42:23","files":20,"name":"Smellis","id":89}],"parent_json":""} */

So, does everyone agree that this should be working?  I am lost.


On 5/21/07, David Dashifen Kees <[EMAIL PROTECTED]> wrote:
>
> Looks good to me.
>  - Dash -
>
> Stephan Ellis wrote:
> > OK, so I went over the code, and it appears that as long as the X-JSON
> > header does not exist and my Content-type is application/javascript and my
> > json in the response body is wrapped with:
> >
> > /*-secure- (some whitespace) [json data here](some more whitespace) */
> >
> > It should evaluated the response body.  Am I wrong?
> >
> > -stephan
> >
> > On 5/21/07, David Dashifen Kees <[EMAIL PROTECTED]> wrote:
> >
> >> Wow ... I didn't know that about the content-type of the response body.
> >> Thanks.
> >> - Dash -
> >>
> >> Tom Gregory wrote:
> >>
> >>> The value of the X-JSON header and whether the response body is
> >>> evaluated are separate concerns. If the X-JSON header is present, and
> >>> evals to a json object, it's passed as the second parameter to
> >>> onSuccess, et al.
> >>>
> >>> e.x.
> >>> onSuccess (transport, json) {
> >>>    // ...
> >>> }
> >>>
> >>> The eval of the response body is based on the "Content-type" header.
> >>> If you poke around the code from svn, you'll find these lines in
> >>> ajax.js:
> >>>
> >>>        var contentType = this.getHeader('Content-type');
> >>>        if (contentType && contentType.strip().
> >>>          match(/^(text|application)\/(x-)?(java|ecma)script(;.*)?$/i))
> >>>            this.evalResponse();
> >>> // ...
> >>>
> >>> // ...
> >>> evalResponse: function() {
> >>>      try {
> >>>        return eval((this.transport.responseText || '').unfilterJSON());
> >>>      } catch (e) {
> >>>        this.dispatchException(e);
> >>>      }
> >>>    }
> >>>
> >>> Does that make things any clearer?
> >>>
> >>>
> >>> TAG
> >>>
> >>> On May 21, 2007, at 12:38 PM, Stephan Ellis wrote:
> >>>
> >>>
> >>>
> >>>> Yes, my framework, specifically my view that generates JSON sticks
> >>>> the X-JSON header in to accommodate prototype.  I guess to rephrase
> >>>> my question, if I turn on the X-JSON header, is it supposed to
> >>>> automatically eval the response body?  Sorry if I seem like I have
> >>>> a thick skull :)  Thanks a bunch...
> >>>> -stephan
> >>>>
> >>>> On 5/21/07, David Dashifen Kees <[EMAIL PROTECTED]> wrote:
> >>>>
> >>>> 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