2010-02-06 9 views
12

Dans mon document que j'ai ce script:

$.ajax({ type:"POST",url:"ajax.php",data:data, 
    success: function() { 
     //onsuccess 
    }, 
    error: function() { 
     //onerror 
    } 
}); 

Comment puis-je, dans le document ajax.php, délibérément jeter une erreur? Est-il suffisant de simplement lancer un code d'état HTTP 400 ou quelque chose? (Et si c'est le cas, 400 est-il le bon?)

Pourquoi je demande est que je veux utiliser ceci pour soumettre un formulaire au serveur, et si un champ n'est pas rempli correctement je veux alerter l'utilisateur à travers le paramètre d'erreur dans $.ajax. Je sais que je pourrais le faire en utilisant javascript en premier lieu, mais j'espère que je pourrais le faire de cette façon (donc je ne dois pas écrire la vérification deux fois). Mais bien sûr, en faisant cela, je ne peux pas séparer les différents champs de l'autre.

Sur la base de ce que je veux l'utiliser pour, puis-je en quelque sorte lancer une « erreur personnalisée », donc si le champ name n'a pas été rempli correctement, il retourne le nom du champ (c.-à-name). Est-il suffisant pour faire quelque chose comme ceci:

En ajax.php:

if (isFilledOutProperly($name) == false) { 
    echo "name"; 
} 
else { 
    echo "success"; 
} 

Et:

success: function(data) { 
    if (data == 'name') { 
     //error 
    } 
      else { 
     //success 
    } 
}, 

je peut-être sur la mauvaise voie, mais si quelqu'un a une meilleure suggestion sur comment je peux le faire, s'il vous plaît dites-moi. Merci!

Répondre

11

La clause error de $.ajax() appels n'est pas vraiment pour les circonstances dont vous parlez. error couvre les cas, disons, d'erreurs HTTP. Les échecs de validation ne sont pas vraiment des erreurs dans ce cas. Il est préférable d'indiquer ceux dans le rappel success avec les données appropriées renvoyées par le serveur.

Si vous regardez le documentation:

error(XMLHttpRequest, textStatus, errorThrown)Function 

Une fonction à appeler si la requête échoue. La fonction est passée trois arguments : L'objet XMLHttpRequest, une chaîne décrivant le type d'erreur qui s'est produite et un objet d'exception facultatif, le cas échéant. Les valeurs possibles pour le deuxième argument (outre null) sont "timeout", "erreur", "notmodified" et "parsererror". C'est un Ajax Event.

Note: les conditions d'erreur dont il parle des erreurs d'analyse, par les délais d'attente, les erreurs (HTTP) et non modifiés (qui est une autre réponse HTTP).

Techniquement, votre requête aboutit mais la validation échoue, ce qui n'est pas une erreur en soi.

+3

Selon le principe REST, la réponse à une requête POST avec HTTP 200 signifie que la ressource a été créée avec succès. Vous pouvez répondre avec un HTTP 400 et également fournir des informations détaillées sur l'erreur au format text/html/json/xml. – Leventix

+0

Je sais cela, mais comme je le demandais: je peux délibérément jeter la partie "erreur" de $.ajax() 'en forçant une erreur HTML? – Eikern

+0

Oui, si vous répondez avec autre que HTTP 2xx, la partie "erreur" sera appelée. – Leventix