Hmm, interesting.  Did you remove the /*-secure- */ part?  It works
perfectly with 1.5.0 -stephan

On 5/21/07, David Dashifen Kees <[EMAIL PROTECTED]> wrote:
>
> When I try to evaluate your JSON using Firebug, it tells me there's an
> invalid label in there somewhere.
>
>  - Dash -
>
> Stephan Ellis wrote:
> > 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