I would create 2 functions, like

if (result == 'validation succeeded') {
    someSuccessFunction();
    return;
  }
  someFailFunction();
  return;
}

On 3/31/07, tawm <[EMAIL PROTECTED]> wrote:


Hello people,

I'm in a situation right now in which I do an AJAX call, supplying it
a callback function (for success). In this callback function I do some
operations which determine what happens after the AJAX call. Normally
you would solve this by calling yet another callback function at the
end of the success-callback. But now this is not possible because the
function that did the original AJAX call is called from inside a
plugin and should return a certain value (true or false) to instruct
the plugin's consequent behaviour.

The plugin I'm talking about is the jQuery form plugin, so the
situation is as follows:

--- begin example code ---

// Activate the form plugin to enable AJAX submission of a form.
$("#aForm").ajaxForm({beforeSubmit: validateForm});

// validateForm is called before the form is actually submitted.
// It should return true if the form should be submitted after all
(f.e. because all data is valid),
// false in case it should stop (f.e. there is some invalid data in
the form).
function validateForm()
{
  $.ajax({url: '/validateSomething.php', data: 'something', success:
function(result) {
    // Here our validation call is done, so here we know whether we
want validateForm() to return
    // true or false. Problem is: we are in a callback function and we
cannot reach the function
    // from which we originate (validateForm). Any value that we
return here is simply lost in
    // jQuery's $.ajax() function.
    if (result == 'validation succeeded') {
      return true;  // This doesn't work because the return value is
dropped by $.ajax().
    }
    return false;  // This doesn't work because the return value is
dropped by $.ajax().
  });
  return;  // Here we want to return true or false, depending on the
behaviour that we expect from
             // the form plugin after this callback finishes. Problem
is, here we don't know this value,
             // since it is determined in $.ajax()'s success callback
function.
}

--- end example code ---

Since I'm not very experienced with asynchronous stuff in Javascript I
don't know whether this is a flaw in jQuery or an inevitable result of
the way AJAX works. In the latter case, I guess that the architecture
of the jQuery form plugin is flawed. Or I must be overlooking a
possibility to return a value based on the outcome of a AJAX call done
in the same function.

I hope all is a bit clear. Thanks in advance.

Tim Molendijk


Reply via email to