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