2011-07-11 3 views
0

Donc, de mon php, je me fais l'écho {error: 1}:Ajax/JQuery Redirect appel ne fonctionne pas

$(document).ready(function(){ 
    $('#form').submit(function(e){ 
     register(); 
    }); 
}); 

function register(){ 
    $.ajax({ 
     type:"POST", 
     url:"submit.php", 
     async : false, 
     data: $('#form').serialize(), 
     dataType: "json", 
     success: function(msg){ 
      if(parseInt(msg.error)==1){ 
       window.location="index.html"; 
      } 
      else if(parseInt(msg.error)==0){ 
       $('#error_out').html(msg.error); 
       e.preventDefault(); 
      } 
     } 
    }); 
} 

Mais il ne veut pas rediriger. Au lieu de cela, renvoyez "submit.php" avec 1 écho.

Répondre

2

Eh bien, vous ne pouvez pas avoir un retour de 1, car ce ne serait pas JSON. Si vous ne faites que renvoyer '1' et que vous effectuez un parseInt, définissez dataType sur 'html'.


Si vous voulez JSON, faites ceci dans votre PHP:

$return = array('code'=>1); 
echo json_encode($return); 

Votre fonction 'succès' ressemblerait à ceci:

if(msg.code==1){ 
    window.location="index.html"; 
} 
else if(msg.code==0) 
{ 
    $('#error_out').html(msg.code); 
    e.preventDefault(); 
} 
else 
{ 
    // handle any other return value. 
} 

Ok, ma faute ne pas lire le problème correctement. Le problème est que vous soumettez le formulaire et que vous ne l'annulez pas correctement. Pour ce faire, dans votre gestionnaire d'événements:

$(document).ready(function(){ 
    $('#form').submit(function(e){ 
     e.preventDefault(); 
     register(); 
    }); 
}); 

Vous pouvez supprimer celui de votre cas d'échec. Celui-là ne fait rien, puisque la pile aurait déjà été effacée au moment où la fonction async est revenue (si elle l'a fait).

+0

Je sais, je sais, ce que je retourne est un json (dans mon code). Je voulais juste le rendre plus facile à lire. La partie json fonctionne, l'erreur jquery affichant les divs fonctionne, c'est juste qu'elle ne me redirige pas. J'utilise en fait dans mon code msg.txt qui représente l'url – user461316

+0

Ne simplifie pas un cas de test autant sans le tester, aussi est cassé ... construire un qui présente le même comportement. :) De toute façon, peut-être que mes commentaires supplémentaires aideront, sinon nous aurons besoin de voir plus de code. –

+0

Ce que vous avez écrit dans votre commentaire est la chose exacte que j'ai dans mon code php. C'est de ma faute si j'écris 1 au lieu du json complet. – user461316

1

Vous devez empêcher la forme de se soumettre.

$(document).ready(function(){ 
    $('#form').submit(function(e){ 
     register(); 

     e.preventDefault(); // Or return false; 
    }); 
}); 

Votre formulaire est soumis et ajax n'a pas la possibilité de travailler ses rappels.

+0

Alors, quand puis-je soumettre mon formulaire? – user461316

+0

Vous avez déjà envoyé votre formulaire avec l'appel ajax – Andy

+0

Avez-vous besoin de soumettre votre formulaire? A partir des exemples de code, je fais l'impression que vous utilisez la forme comme un wrapper pour votre appel ajax. – petraszd