No. If you put in the X-JSON header, then it tries to automatically
evaluate the contents of the X-JSON header. The only thing you can do
to get an auto evaluation of the response body is to use the evalScripts
option of the Ajax.Updater object to automatically evaluate and
javascript blocks (from <script> to </script>) which exist within your
response body. The timing will be interesting, though. I think that
the scripts are evaluated between onSuccess and onComplete, so you can
access an object or function created within a response body only from
within the onComplete callback and then only if you can get the scope of
the created object/function to include the scope of the callback (i.e.,
use global variables). All in all, I'm not sure what your framework is
doing, but if you want automatic JSON evaluation, your best bet is
probably to put a JSON string in the X-JSON header. If you send JSON
back as the response body, there's no real easy way to make sure it's
evaluated properly.
- Dash -
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
-~----------~----~----~----~------~----~------~--~---