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
-~----------~----~----~----~------~----~------~--~---