2010-08-18 14 views
30

Ho un modulo che utilizza Ajax per la verifica lato client. La fine del modulo è la seguente:Reindirizzamento pagina con richiesta Ajax corretta

$.ajax({ 
     url: 'mail3.php', 
     type: 'POST', 
     data: 'contactName=' + name + '&contactEmail=' + email + '&spam=' + spam, 

     success: function(result) { 
      //console.log(result); 
      $('#results,#errors').remove(); 
      $('#contactWrapper').append('<p id="results">' + result + '</p>'); 
      $('#loading').fadeOut(500, function() { 
       $(this).remove(); 

      }); 

     } 
    }); 

EDIT: questo è il mio file mail3.php fare con gli errori:

$errors=null; 

if (($name == "Name")) { 
    $errors = $nameError; // no name entered 
} 
if (($email == "E-mail address")) { 
    $errors .= $emailError; // no email address entered 
} 
if (!(preg_match($match,$email))) { 
    $errors .= $invalidEmailError; // checks validity of email 
} 
if ($spam != "10") { 
    $errors .= $spamError; // spam error 
} 

if (!($errors)) { 
    mail ($to, $subject, $message, $headers); 
    //header ("Location: thankyou.html"); 
    echo "Your message was successfully sent!"; 
    //instead of echoing this message, I want a page redirect to thankyou.html 

} else { 
    echo "<p id='errors'>"; 
    echo $errors; 
    echo "</p>"; 
} 

Mi chiedevo se è possibile reindirizzare l'utente a un Grazie pagina se la richiesta Ajax ha esito positivo e non sono presenti errori. È possibile?

Grazie! Amit

+0

duplcate di http://stackoverflow.com/questions/3430877/how-do-i-redirect-a-page-jquery –

+1

@Andrea: Non è un duplicato perché sto cercando di reindirizzare la pagina solo se non sono presenti errori. Se sono presenti errori, voglio che scriva quegli errori. – Amit

risposta

28

Certo. Basta mettere qualcosa alla fine della funzione successo come:

if(result === "no_errors") location.href = "http://www.example.com/ThankYou.html" 

in cui il server restituisce la risposta no_errors quando non ci sono errori presenti.

+2

L'uso corretto dei codici di stato HTTP renderà ogni successo un successo senza che il server debba ritrasferire alcun messaggio. –

+1

@ Jeremy- True, a meno che non si desideri restituire messaggi di errore specifici per il sito da gestire o anche URL diversi da reindirizzare in caso di errore. Questi messaggi dovrebbero essere restituiti con un codice di risposta di 200 che richiede una risposta no_errors per differenziare. – Adam

+0

In realtà dal primo sguardo mi sembra che questo metodo avrebbe funzionato! – Amit

9

Si può solo reindirizzare in success gestore, in questo modo:

window.location.href = "thankyou.php"; 

O dal momento che stai visualizzazione dei risultati, attendere qualche secondo, ad esempio, questo potrebbe attendere 2 secondi:

setTimeout(function() { 
    window.location.href = "thankyou.php"; 
}, 2000); 
+0

Puoi dare un'occhiata alla mia modifica per vedere come posso gestire lo scenario senza errori? Voglio solo che venga reindirizzato su thankyou.php se non sono presenti errori. – Amit

+0

@Amit - Si potrebbe mettere 'if (result ===" Il tuo messaggio è stato inviato con successo! ")' Prima di questo, che invierebbe solo in quei casi. –

0

penso che si può fare con:

window.location = "your_url"; 
0

I Supponiamo che tu possa attaccare questo in due modi;

1) inserire window.location = 'http://www.yourdomain.com nella funzione riuscita.

2) Utilizzare un ulteriore chiamata ajax un iniettare questo in un elemento nella pagina, ulteriori informazioni su cui si possono trovare nella documentazione jQuery a http://api.jquery.com/jQuery.get/

14

Basta fare qualche controllo degli errori, e se tutto passa quindi impostare window.location per reindirizzare l'utente a una pagina diversa.

$.ajax({ 
    url: 'mail3.php', 
    type: 'POST', 
    data: 'contactName=' + name + '&contactEmail=' + email + '&spam=' + spam, 

    success: function(result) { 
     //console.log(result); 
     $('#results,#errors').remove(); 
     $('#contactWrapper').append('<p id="results">' + result + '</p>'); 
     $('#loading').fadeOut(500, function() { 
      $(this).remove(); 

     }); 

     if (/*no errors*/) { 
      window.location='thank-you.html' 
     } 

    } 
}); 
+0

Come posso verificare la presenza di errori se tutti gli errori vengono elaborati tramite il file mail3.php? – Amit

+1

dovresti intercettare errori nel tuo file mail3.php e restituire un codice di stato di 500 sulla tua risposta. –

+0

Potresti elaborare un po '? In che modo esattamente restituisco questo codice di stato di 500? – Amit

2

Nel file mail3.php si dovrebbe intercettare gli errori in un try {} catch {}

try { 
    /*code here for email*/ 
} catch (Exception $e) { 
    header('HTTP/1.1 500 Internal Server Error'); 
} 

Poi, nel tuo success chiamata non dovrete preoccuparvi di vostri errori, perché non sarà mai tornare come un successo.

ed è possibile utilizzare: window.location.href = "thankyou.php"; all'interno della funzione di successo come ha dichiarato Nick.

-1
// Create lag time before redirecting 
setTimeout(function() { 
    window.location.href = "thankyou.php"; 
}, 2000); 

$errors=null; 

if (($name == "Name")) { 
    $errors = $nameError; // no name entered 
} 
if (($email == "E-mail address")) { 
    $errors .= $emailError; // no email address entered 
} 
if (!(preg_match($match,$email))) { 
    $errors .= $invalidEmailError; // checks validity of email 
} 
if ($spam != "10") { 
    $errors .= $spamError; // spam error 
} 

if (!($errors)) { 
    mail ($to, $subject, $message, $headers); 
    echo "Your message was successfully sent!"; 
    //instead of echoing this message, I want a page redirect to thankyou.html 
    // redirect 
    setTimeout(); 
} else { 
    echo "<p id='errors'>"; 
    echo $errors; 
    echo "</p>"; 
} 
+1

Fornisci i tuoi commenti, non solo il codice – ekostadinov

+0

ekostadinov - Il codice ha commenti ma ok! –

0

Ho pubblicato la situazione esatta su un thread diverso. Re-post.

Scusami, questa non è una risposta alla domanda pubblicata sopra.

Ma porta un argomento interessante --- QUANDO utilizzare AJAX e quando NON usare AJAX. In questo caso è bene non usare AJAX.

Facciamo un semplice esempio di login e password.Se il login e/o la password non corrispondono, sarebbe utile usare AJAX per riportare un semplice messaggio che dice "Login errato". Ma se il login e la password sono corretti, perché dovrei richiamare una funzione AJAX per reindirizzare alla pagina utente?

In un caso simile, penso che sarebbe bello utilizzare un semplice modulo INVIA. E se l'accesso fallisce, reindirizza a Relogin.php che ha lo stesso aspetto del Login.php con un messaggio GET nell'URL come Relogin.php? Error = InvalidLogin ... qualcosa del genere ...

Solo il mio 2 centesimi. :)

2
$.ajax({ 
     url: 'mail3.php', 
     type: 'POST', 
     data: 'contactName=' + name + '&contactEmail=' + email + '&spam=' + spam, 

     success: function(result) { 

      //console.log(result); 
      $('#results,#errors').remove(); 
      $('#contactWrapper').append('<p id="results">' + result + '</p>'); 
      $('#loading').fadeOut(500, function() { 
       $(this).remove(); 

      }); 

      if(result === "no_errors") location.href = "http://www.example.com/ThankYou.html" 

     } 
    }); 
Problemi correlati