2010-02-08 5 views

Répondre

13

En supposant que vous avez besoin d'envoyer la demande POST de manière asynchrone, vous pouvez consulter l'exemple ci-dessous pour vous aider à aller dans la bonne direction:

<img src="my_image.png" onClick="postOnClick();"> 

vous avez alors besoin d'une fonction JavaScript qui présente un HTTP POST asynchrone demande et redirige le navigateur vers une URL reçue de la réponse HTTP. Vous devriez être en mesure d'utiliser XMLHttpRequest pour un tel appel asynchrone, comme dans l'exemple suivant:

function postOnClick() 
{ 
    var http = new XMLHttpRequest(); 

    var params = "arg1=value1&arg2=value2"; 

    http.open("POST", "post_data.php", true); 

    http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    http.setRequestHeader("Content-length", params.length); 
    http.setRequestHeader("Connection", "close"); 

    http.onreadystatechange = function() { 
     if (http.readyState == 4 && http.status == 200) { 
      window.location = http.responseText; 
     } 
    } 

    http.send(params); 
} 

Notez que pour un appel vraiment cross-browser XMLHttpRequest, vous pouvez utiliser un cross-browser standard conforme XMLHttpRequest mise en œuvre comme XMLHttpRequest.js, sauf si vous utilisez un cadre JavaScript comme jQuery, Prototype, YUI, ExtJS, et al.

En outre, notez également que ce qui précède ne fonctionnera que si vous postez sur un script hébergé dans le même domaine, sinon vous violerez les same-origin policy et les navigateurs Web modernes refuseront d'envoyer la demande.

+0

Cela ne fonctionne pas. http.responseText est le corps du document HTML (post_data.php). Vous ne pouvez pas rediriger vers une chaîne HTML. – JamesBrownIsDead

+1

@JamesBrownIsDead: Cela dépend de ce que vous renvoyez de votre script côté serveur. Si vous renvoyez un texte brut simple, 'http.responseText' ne contient que l'URL. Y a-t-il une raison particulière pour laquelle votre script renvoie du code HTML? –

1

Utilisez une image de type entrée.

<form action="someUrl.html" method="POST"> 
    <input type="image" src="img.png" width="30" height="30" alt="Submit"> 
</form> 

En cliquant sur l'image que vous allez être redirigé vers « someUrl.html » et un message sera envoyé à lui

15

Il suffit de lier le bouton à présenter la méthode d'un élément de forme, et la redirection va arriver naturellement.

<script type='text/javascript'> 
function form_send(){ 
    f=document.getElementById('the_form'); 
    if(f){ 
    f.submit(); 
    } 
    } 
</script> 

<form method='post' action='your_post_url.html' id='the_form'> 
    <input type='hidden' value='whatever'> 
</form> 

<span id='subm' onclick='form_send()'>Submit</span> 
+0

Cela ne gère pas l'obtention d'une adresse de redirection à partir du corps de la réponse. – friedo

+1

Aha, j'ai raté cette partie de la question. Cela aurait pu être formulé plus clairement. –

+0

Je suis d'accord avec la légère ambiguïté de la question.Je ne suis même pas sûr que ma réponse aborde la question correctement, même si elle a reçu trois votes. (+1 pour compenser les downvotes) –

2

En utilisant jQuery les données en post et redirigent à l'emplacement souhaité comme ceci:

$.ajax({ 
    type: 'POST', 
    url: 'receivedata.asp', 
    data: 'formValue=someValue', 
    success: function(data){ 
     window.location = data; 
    } 
}); 

Vous pouvez retirer le data: 'formValue=someValue', s'il n'y a pas de données pour passer à la page que vous souhaitez publier sur.

+1

Ne fonctionne pas comme prévu. 'data' récupère la réponse de la requête, dans ce cas le fichier 'receivedata.asp' et non une URL. – pctroll

3

Au lieu de window.location = http.responseText utiliser les éléments suivants:

http.onreadystatechange = function() { 
    if (http.readyState == 4 && http.status == 200) { 
    document.open(); 
    document.write(http.responseText); 
    } 
} 

document.open() efface le contenu actuel de la page et la réponse document.write() insère du code html dans votre page.