[Proto-Scripty] unable to evaluate javascript in Ajax.Request response

2008-11-07 Thread jonathon

Hello,

I'm having difficulty getting something to work.  Perhaps someone will
know the solution?

The function:

new Ajax.Request('test.php', {
evalScripts: true,
onSuccess: function(transport) {
$('canvas').innerHTML = transport.responseText;
},
  onFailure: function() {
err = 'h1Unable to connect to server, operation cancelled/h1';
$('canvas').innerHTML = err + $('canvas').innerHTML;
showWait(false);
  }
}

I read in the api that you need to set the contentType to 'text/
javascript', so I did that in my php:

? header(Content-type: text/javascript); ?
script type='text/javascript'alert('hi');/script

I am never alerted though...  Any ideas?  Thanks!!!

--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Prototype  script.aculo.us group.
To post to this group, send email to prototype-scriptaculous@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/prototype-scriptaculous?hl=en
-~--~~~~--~~--~--~---



[Proto-Scripty] Re: unable to evaluate javascript in Ajax.Request response

2008-11-07 Thread Jonathon Deason
Alex,

I hit submit too early, I removed most of the real code to get it out of the
way and accidentally changed it before I was allowed to post again! evalJS
was not functioning either.

TJ,


But!  If you do want to use Ajax.Request, you can just use
 Element.update[6] in your onSuccess handler to update the element; it
 will eval the scripts for you.  If you end up needing to eval them for
 yourself for any reason, Prototype provides String.evalScripts[7] (and
 String.stripScripts[8]) to help.


I do want to use Ajax.Request for other reasons, but I did not know I could
do Element.update!  I like it.  I figured out I can use evalScripts(), but
it seems... quirky?

Thanks for all the help!


On Fri, Nov 7, 2008 at 1:10 AM, T.J. Crowder [EMAIL PROTECTED] wrote:


 Hi Jonathan,

  new Ajax.Request('test.php', {
  evalScripts: true,

 Ajax.Request doesn't have an evalScripts option[1][2], that's an
 option to Ajax.Updater[3].

  I read in the api that you need to set the contentType to 'text/
  javascript'...

 Only if you're sending back JavaScript.  If you're sending back HTML
 with embedded script tags, you want text/html (which is probably the
 PHP default).  I suspect you were looking at the evalJS option[1], but
 that's if what you're sending back is just script.

 Looking at your Ajax.Request, you can use Ajax.Updater instead.
 Here's a rough translation of your code:

 function doSomeRequest() {
var err;

err = $('canvas').innerHTML;
new Ajax.Updater('canvas', 'test.php', {
evalScripts: true,
 onFailure: function() {
err = 'h1Unable to connect to server, operation
 cancelled/h1' + err;
Element.update.defer('canvas', err);
},
onComplete: function() {
showWait(false);
}
});
 }

 A couple of notes on that:

 1. I've removed the onSuccess handler, because Ajax.Updater does what
 we wanted to do on success.

 2. I've moved the showWait(false) to the onComplete handler, because
 that's fired regardless of the outcome and I assume we want to get rid
 of the wait indicator on both success and failure.

 3. I've grabbed the content of the target before sending the request,
 because once we're in onFailure, we may or may not still have it
 (since most servers do send back content along with their 404s or 500s
 or whatnot).  To use the previous content later, I used a closure for
 the onFailure handler, where otherwise you could (if you wanted to)
 make it a named function declared elsewhere.  (It being a closure is
 not unusual and is unlikely to be a problem; if it is, you can get
 around that using Function.curry[4].)

 4. In onFailure, I want to be sure my update showing the error
 supercedes any update Ajax.Updater may do automatically, so I queue it
 to run just a moment later using Function.defer[5].  Incredibly
 useful, is Function.defer. :-)

 But!  If you do want to use Ajax.Request, you can just use
 Element.update[6] in your onSuccess handler to update the element; it
 will eval the scripts for you.  If you end up needing to eval them for
 yourself for any reason, Prototype provides String.evalScripts[7] (and
 String.stripScripts[8]) to help.

 So many options!  Barring some additional requirement, I'd go with
 Ajax.Updater. :-)

 [1] http://www.prototypejs.org/api/ajax/options
 [2] http://www.prototypejs.org/api/ajax/request
 [3] http://www.prototypejs.org/api/ajax/updater
 [4] http://www.prototypejs.org/api/function/curry
 [5] http://www.prototypejs.org/api/function/defer
 [6] http://www.prototypejs.org/api/element/update
 [7] http://www.prototypejs.org/api/string/evalscripts
 [8] http://www.prototypejs.org/api/string/stripscripts

 HTH,
 --
 T.J. Crowder
 tj / crowder software / com

 On Nov 7, 2:51 am, jonathon [EMAIL PROTECTED] wrote:
  Hello,
 
  I'm having difficulty getting something to work.  Perhaps someone will
  know the solution?
 
  The function:
 
  new Ajax.Request('test.php', {
  evalScripts: true,
  onSuccess: function(transport) {
  $('canvas').innerHTML = transport.responseText;
  },
onFailure: function() {
  err = 'h1Unable to connect to server, operation
 cancelled/h1';
  $('canvas').innerHTML = err + $('canvas').innerHTML;
  showWait(false);
}
 
  }
 
  I read in the api that you need to set the contentType to 'text/
  javascript', so I did that in my php:
 
  ? header(Content-type: text/javascript); ?
  script type='text/javascript'alert('hi');/script
 
  I am never alerted though...  Any ideas?  Thanks!!!
 


--~--~-~--~~~---~--~~
You received this message because you are subscribed to the Google Groups 
Prototype  script.aculo.us group.
To post to this group, send email to prototype-scriptaculous@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/prototype-scriptaculous?hl=en
-~--~~~~--~~--~--~---