views:

28

answers:

2

In bottom of my index.php I have a Javascript function between paired <script> tags. I have a click handler that calls the function that makes a Prototype.js Ajax request.

This version does not work (no request is made), although the myFunction itself is called.

function myFunction(fr, fw) {
    new Ajax.Request('/ascript', {
        method: 'post',
        parameters: { a: fr, b: fw }, 
        onSuccess: function(transport) { }, 
        onFailure: function(request) { }
    });
}

However when I add the alert("something"); line the ascript php script is called.

function myFunction(fr, fw) {
    new Ajax.Request('/ascript', {
        method: 'post',
        parameters: { a: fr, b: fw }, 
        onSuccess: function(transport) { alert("here"); }, 
        onFailure: function(request) { }
    });
}

Might it be some weird whitespace problem? Is there an error in my syntax?

A: 

You should try onComplete event. Prototype sometimes doesn't fall into either onSuccess or onFailure however all request will be covered by onComplete

also try wrapping the ajax request with Try - Catch block, it might help.

Serkan Yersen
try catch did not help, adding alert("Blah") to onComplete ends in the same result - the thing starts working. But I don't want to show an alert everytime the request completes :)
texmex5
A: 

So I've found the problem. The problem was in how I added the eventhandler to my "button"

Initially (on both examples given in my question) I had:

echo "<a href='' ><p id='button' onclick='myFunction(" .$a .", " .$b.");'>Click</p></a>";

The surrounding <p> with a link tag was ofcourse a bad idea ...

This works:

echo "<a href='' onClick='Event.stop(event);'><p id='button' onclick='myFunction(" .$a .", " .$b .");'>Click</p></a>";

Thanks to all for your answers. I guess the moral of the story is, look eaven farther from the Javascript itself, look where it gets called and what could be broken there.

texmex5