2013-09-26 27 views
62

Come posso reindirizzare con i dati del post?jQuery - Reindirizzamento con dati post

Come passare a nuova pagina con $_POST?

Come fare questo? Come si fa e whyfore sarà fatto

+4

Sono davvero molto interessato a sentire questa risposta. –

+0

Non è possibile impostare la posizione di Windows con una richiesta POST, solo richieste GET e non è possibile reindirizzare una richiesta POST, quindi la soluzione usuale è creare dinamicamente un modulo con i dati necessari e l'attributo action e inviarlo. – adeneo

+0

Stai dimenticando il tag PHP o jQuery ha una variabile '$ _POST'? –

risposta

66

C'è un plug-in JQuery che realizza praticamente quello che stai cercando di fare: https://github.com/mgalante/jquery.redirect/blob/master/jquery.redirect.js.

Dopo compresi JQuery e le jquery.redirect.min.js plug-in, si può semplicemente fare qualcosa di simile:

$().redirect('demo.php', {'arg1': 'value1', 'arg2': 'value2'}); 

Spero che questo aiuti!

+0

Grazie amico .. questo ha funzionato per me – Binaryrespawn

+0

@TimS, dopo aver controllato quel collegamento, non sono ancora chiaro come recuperare i dati nella nuova pagina utilizzando il post. – gotguts

+0

non importa, l'ho capito e l'ho fatto funzionare. Ottimo suggerimento! – gotguts

7

Perché non basta creare una forma con alcuni ingressi nascosti e inviarlo utilizzando jQuery? Dovrebbe funzionare :)

+0

Non funziona con i caricamenti di file drag'n'drop. Non è possibile assegnare input di file per motivi di sicurezza. – mlt

+0

Non riesco a pensare a nessuna situazione in cui potresti voler reindirizzare l'utente da qualche parte e fargli caricare un file con la stessa richiesta. Ma ovviamente - è vero, non funzionerà in questo caso. – kao3991

+0

@mlt Non sono sicuro del motivo per cui non funzionerebbe. Non si assegna nulla all'input del file, ma si utilizzano altri campi nascosti di input che vengono pubblicati nello stesso momento del modulo. – Danosaure

0

perché non basta utilizzare un pulsante, invece di presentare. facendo clic sul pulsante ti consente di creare un URL corretto per il tuo browser a cui reindirizzare.

$("#button").click(function() { 
    var url = 'site.com/process.php?'; 
    $('form input').each(function() { 
     url += 'key=' + $(this).val() + "&"; 
    }); 
    // handle removal of last &. 

    window.location.replace(url); 
}); 
+2

Ciò causerà solo una normale richiesta GET mentre l'URL sta cambiando. La domanda iniziale era di fare una richiesta POST. –

0

Questo ha bisogno di chiarimenti. Il tuo server gestisce un POST che vuoi reindirizzare da qualche altra parte? O vuoi reindirizzare una richiesta GET regulatr ad un'altra pagina che si aspetta un POST?

In entrambi i casi ciò che si può fare è qualcosa di simile:

var f = $('<form>'); 
$('<input>').attr('name', '...').attr('value', '...'); 
//after all fields are added 
f.submit(); 

E 'probabilmente una buona idea per fare un link che dice "clicca qui se non reindirizzati automaticamente" a che fare con il blocco dei pop-up.

0

Ho incluso il jquery.redirect.min.js plugin nella sezione head insieme a questa soluzione JSON per inviare i dati

<script type="text/javascript">  
    $(function() { 
    $('form').on('submit', function(e) { 
     $.ajax({ 
     type: 'post', 
     url: 'your_POST_URL', 
     data: $('form').serialize(), 
     success: function() { 
     // now redirect 
     $().redirect('your_POST_URL', { 
      'input1': $("value1").val(), 
      'input2': $("value2").val(), 
     'input3': $("value3").val() 
     }); 
     } 
    }); 
    e.preventDefault(); 
}); 
}); 
</script> 

Poi subito dopo il modulo ho aggiunto

$(function(){ 
    $('#your_form_Id').submit(); 
    }); 
+0

Nota: gli input devono essere ID di input NON nomi! – kptrick

70

Ecco una semplice piccola funzione che può essere applicata ovunque finché si utilizza jQuery.

var redirect = 'http://www.website.com/page?id=23231'; 
$.redirectPost(redirect, {x: 'example', y: 'abc'}); 

// jquery extend function 
$.extend(
{ 
    redirectPost: function(location, args) 
    { 
     var form = ''; 
     $.each(args, function(key, value) { 
      form += '<input type="hidden" name="'+key+'" value="'+value+'">'; 
     }); 
     $('<form action="'+location+'" method="POST">'+form+'</form>').appendTo('body').submit(); 
    } 
}); 

Per i commenti, ho ampliato sulla mia risposta:

// jquery extend function 
$.extend(
{ 
    redirectPost: function(location, args) 
    { 
     var form = $('<form></form>'); 
     form.attr("method", "post"); 
     form.attr("action", location); 

     $.each(args, function(key, value) { 
      var field = $('<input></input>'); 

      field.attr("type", "hidden"); 
      field.attr("name", key); 
      field.attr("value", value); 

      form.append(field); 
     }); 
     $(form).appendTo('body').submit(); 
    } 
}); 
+3

Questa è una grande funzione facile da implementare ... – CrandellWS

+9

aggiungi '.appendTo ('body')' per dispositivi mobili ... esempio: '$ ('

'+ form +'
') .appendTo (' body '). Submit(); 'idea basata su [questa risposta] (http://stackoverflow.com/a/18870799) – CrandellWS

+4

Questa soluzione è molto meglio della risposta accettata imo. È facile da implementare e non è necessario caricare librerie aggiuntive! –

0

Construct e compilare un action = "http://example.com/vote" forma di metodo nascosto = POST e inviare esso, piuttosto che usare window.location affatto.

o

$('#inset_form').html(
    '<form action="url" name="form" method="post" style="display:none;"> 
    <input type="text" name="name" value="' + value + '" /></form>'); 
document.forms['form'].submit(); 
2

Prima del documento/finestra pronto add "estendere" per jQuery:

$.extend(
{ 
    redirectPost: function(location, args) 
    { 
     var form = ''; 
     $.each(args, function(key, value) { 

      form += '<input type="hidden" name="'+value.name+'" value="'+value.value+'">'; 
      form += '<input type="hidden" name="'+key+'" value="'+value.value+'">'; 
     }); 
     $('<form action="'+location+'" method="POST">'+form+'</form>').submit(); 
    } 
}); 

Usa: i file non posso pubblicare questo metodo:

$.redirectPost("someurl.com", $("#SomeForm").serializeArray()); 

Nota.

0

Penso che questo sia il modo migliore per farlo!

<html> 
<body onload="document.getElementById('redirectForm').submit()"> 
<form id='redirectForm' method='POST' action='/done.html'> 
<input type='hidden' name='status' value='complete'/> 
<input type='hidden' name='id' value='0u812'/> 
<input type='submit' value='Please Click Here To Continue'/> 
</form> 
</body> 
</html> 

Questo sarà quasi istantaneo e l'utente non vedrà nulla!

0

Simile alla risposta di cui sopra, ma scritta in modo diverso.

Problemi correlati