On Nov 18, 6:48 pm, laf <[EMAIL PROTECTED]> wrote:
> So I have this function. It toggles error messages after an AJAX call
> for validation. It works fine in prototype 1.5,
> but an upgrade to 1.6 has broken it and I have not been able to work
> out why.
>
>     onFormSuccess : function(transport)
>     {
>         var json = transport.responseText.evalJSON(true);
>         var errors = $H(json.errors);
>
>         if (errors.size() > 0) {
>             this.form.down('.error').show();
>             errors.each(function(pair) {
>                 this.showError(pair.key, pair.value);
>             }.bind(this));
>         }
>         else {
>             this.form.submit();
>         }
>     }
>
> When the JSON received looks like {"errors":[{"anError":
> "aMessage"}]}, errors.size() works which means the errors are
> displayed as they are supposed to, but when the json received looks
> like {"errors":[]}, then errors.size() falls over as errors is an
> undefined object.

The problem is that iterating (via `each`) over a hash created from an
array yields bunch of prototype's `Array.prototype` extras. Wouldn't
`var errors = json.errors;` be enough? You can keep errors in a format
of `{ name: '...', message: '...' }`:

onFormSuccess : function(transport) {
  var json = transport.responseText.evalJSON(true);
  var errors = json.errors;

  if (errors.length) {
    this.form.down('.error').show();
    errors.each(function(error) {
      this.showError(error.name, error.message);
    }, this);
  }
  else {
    this.form.submit();
  }
}

[...]

> Regards,
> laf.

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

Reply via email to