J'ai un formulaire d'inscription et j'utilise $.ajax
pour le soumettre.
C'est ma demande AJAX:
$(document).ready(function() {
$("form#regist").submit(function() {
var str = $("#regist").serialize();
$.ajax({
type: 'POST',
url: 'submit1.php',
data: $("#regist").serialize(),
dataType: 'json',
success: function() {
$("#loading").append("<h2>you are here</h2>");
}
});
return false;
});
});
Dans mon fichier submit1.php , je vérifie l'existence de champs adresse e-mail et nom d'utilisateur dans la base de données. Je souhaite afficher un message d'erreur si ces valeurs existent sans actualisation de la page .
Comment puis-je ajouter cela au rappel de réussite de ma demande AJAX?
javascript
jquery
ajax
codagebbq
la source
la source
Réponses:
Le résultat n'est probablement pas au format JSON, donc lorsque jQuery tente de l'analyser en tant que tel, il échoue. Vous pouvez attraper l'erreur avec la
error:
fonction de rappel.Vous ne semblez pas avoir besoin de JSON dans cette fonction de toute façon, vous pouvez donc également supprimer la
dataType: 'json'
ligne.la source
dataType:'text'
dataType:
n'est pas spécifié, mais qu'ilurl:
se termine par.json
.$.post
alias, la fourniture enjson
tant que type de données sans json réel provenant du serveur ne déclenche pas desuccess
rappelBien que le problème soit déjà résolu, j'ajoute ceci dans l'espoir que cela aidera les autres.
J'ai fait l'erreur et j'ai essayé d'utiliser une fonction directement comme celle-ci (succès: OnSuccess (productID)). Mais vous devez d'abord passer une fonction anonyme:
Si vous n'utilisez pas de fonction anonyme comme wrapper, OnSuccess est appelé même si le webservice renvoie une exception.
la source
J'ai essayé de supprimer la ligne dataType et cela n'a pas fonctionné pour moi. J'ai contourné le problème en utilisant "complet" au lieu de "succès" comme rappel. Le rappel de succès échoue toujours dans IE, mais comme mon script s'exécute et se termine de toute façon, c'est tout ce qui m'importe.
dans jQuery 1.5, vous pouvez également le faire comme ceci.
la source
complete
sera toujours appelé, que l'appel ajax ait réussi ou non, alors qu'ilsuccess
n'est appelé que si le serveur Web répond avec un200 OK
en-tête HTTP (tout est OK).Assurez-vous de ne pas imprimer (écho ou impression) de texte / données avant de générer vos données au format JSON dans votre fichier PHP. Cela pourrait expliquer que vous obtenez un -sucessfull 200 OK- mais que votre événement de réussite échoue toujours dans votre javascript. Vous pouvez vérifier ce que votre script reçoit en vérifiant la section "Réseau - Réponse" dans firebug pour le POST submit1.php.
la source
Mettez un
alert()
dans votresuccess
rappel pour vous assurer qu'il est appelé.Si ce n'est pas le cas, c'est simplement parce que la requête n'a pas du tout abouti, même si vous parvenez à atteindre le serveur. Les causes raisonnables pourraient être qu'un délai d'expiration expire, ou quelque chose dans votre code php lève une exception.
Installez l'addon firebug pour firefox, si vous ne l'avez pas déjà fait, et inspectez le rappel AJAX. Vous pourrez voir la réponse et savoir si elle reçoit ou non une réponse réussie (200 OK). Vous pouvez également en mettre un autre
alert()
dans lecomplete
callback, qui doit certainement être appelé.la source
success
, alors ce n'est pas un succès. comme la réponse est 200 OK, la réponse de Tatu semble raisonnable, mais pour un dépannage supplémentaire, vous pouvez utiliser un autre événement, appelécomplete
qui est toujours invoqué, indépendamment du fait qu'une demande réussisse ou non (success
ne se produit que si la demande réussit).complete: function (xhr, status) { alert('complete: '+status); }
J'ai eu le même problème. cela se produit car
javascript
attendezjson
le type de données dans le renvoi des données. mais si vous utilisez echo ou print dans votre PHP, cette situation se produit. si vous utilisez laecho
fonctionphp
pour renvoyer des données, supprimez simplement ledataType : "json"
travail assez bien.la source
Je retournais un JSON valide, obtenant une réponse de 200 dans mon rappel "complet", et je pouvais le voir dans la console réseau Chrome ... MAIS je n'avais pas spécifié
une fois que je l'ai fait, contrairement à la «réponse acceptée», cela a en fait résolu le problème.
la source
J'utilise XML pour reporter le résultat du php sur le serveur vers la page Web et j'ai eu le même comportement.
Dans mon cas, la raison était que la balise de fermeture ne correspondait pas à la balise d'ouverture.
la source
J'ai eu ce problème en utilisant une fonction ajax pour récupérer le mot de passe utilisateur de Magento. L'événement de succès n'était pas déclenché, alors j'ai réalisé qu'il y avait deux erreurs:
Ainsi, chaque fois que j'essayais d'utiliser json_eoncde () pour encoder le tableau de retour, la fonction ne fonctionnait pas car l'un de ses index avait des caractères non utf, la plupart accentués dans les mots portugais brésiliens.
la source
J'ai essayé de renvoyer la chaîne du contrôleur mais pourquoi le contrôle revenant au bloc d'erreur n'a pas réussi à ajax
la source
J'ai rencontré le même problème lors de l'interrogation du contrôleur qui ne retourne pas de réponse de succès, lors de la modification de mon contrôleur pour renvoyer le problème du message de réussite a été résolu. note en utilisant le cadre Lavalite. avant:
cela a fonctionné pour moi
la source
J'ai eu le même problème que je l'ai résolu de cette façon: Mon ajax:
D'accord. Le problème n'est pas avec json mais seulement avec la réponse php. Avant: ma réponse php était:
Maintenant:
Maintenant, mon succès fonctionne. PS. Désolé si quelque chose ne va pas mais c'est mon premier commentaire sur ce forum :)
la source
dans mon cas, l'erreur était que c'était du côté du serveur et pour cette raison, il retournait un html
la source
Ajoutez un rappel 'erreur' (tout comme 'succès') de cette façon:
Donc, dans mon cas, j'ai vu en console:
la source
Vous devez déclarer à la fois le rappel de succès et d'erreur. Ajouter
devrait résoudre le problème
la source
Le rappel de succès prend deux arguments:
Assurez-vous également que le
submit1.php
définit l'en-tête de type de contenu approprié:application/json
la source
success
prenne deux arguments semble totalement sans rapport avec la question. Vous pouvez transmettre n'importe quelle quantité de paramètres à une fonction javascript, quel que soit le nombre qu'elle accepte dans sa déclaration, ce n'est donc certainement pas la cause de ces problèmes, et comme aucune des valeursdata
outextStatus
n'est utilisée dans le rappel de succès, il semble aucune bonne raison de les déclarer dans la fonction.