2010-11-24 8 views
1

Dans une page iframe facebook (pas onglet), je voudrais publier des données à une API externe en utilisant cURL, mais je préférerais si ma page de formulaire n'a pas rechargé. Je souhaiterais que jquery ajax se produise (message "soumission de données" lors de la soumission du formulaire et message de réussite de la commande curl_exec). Je pensais créer une iframe cachée avec un formulaire dupliqué et mettre à jour les valeurs dans cette forme sur les événements de changement, mais je ne sais pas comment j'implémenterais cet échange entre PHP et jquery.Envoyer des données via cURL sans recharger la page

Y a-t-il un meilleur moyen? Voici le code sur lequel je travaille:

CODE MIS À JOUR POUR RETOUR FAUX - Ne pas soumettre de données de formulaire.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script> 
</head> 

<body class="fb_canvas-resizable <?php print $body_classes; ?>"> 
    <?php echo $message; ?> 
    <div class="container"> 
     <div class="header"></div> 
     <div class="wrapper"> 
      <div class="content"> 
       <div class="left"> 
        <h1>Sign Up to Sign Off</h1> 
        <form name="signoff" action="curlsub.php" method="post"> 
         <input id="api" type="hidden" name="API_KEY" value="key"> 
        <div class="innerleft"> 
         <input id="fname" type="text" name="fname" class="inputs" tabindex="1" /></br /> 
         <label for="fname">First</label></br /></br /></br /> 
         <input type="text" name="email" class="inputs" tabindex="3" /></br /> 
         <label id="email" for="email">Email</label></br /></br /></br /> 
         <label for="gender">Gender</label></br /></br /> 
         <label for="gender">Age</label></br /></br /></br /> 
         <label for="gender">Income</label></br /></br /></br /> 
        </div> 
        <div class="innerright"> 
         <input id="lname" type="text" name="lname" class="inputs" tabindex="2" /></br /> 
         <label for="lname">Last</label></br /></br /></br /> 
         <input id="password" type="password" name="password" class="inputs" tabindex="4" /></br /> 
         <label for="email">Password</label></br /></br /></br /> 
         <input type="radio" name="sex" value="male" selected="selected" tabindex="5" /> Male 
         <input type="radio" name="sex" value="female" tabindex="6" /> Female</br /></br /> 
         <select name="age" tabindex="7" > 
          <option value=""></option> 
          <option value="baby">Baby</option> 
          <option value="teen">Teen</option> 
          <option value="young">Young</option> 
          <option value="old">Old</option> 
         </select><br /><br /> 
         <select name="income" tabindex="8"> 
          <option value=""></option> 
          <option value="none">None</option> 
          <option value="some">Some</option> 
          <option value="okay">Okay</option> 
          <option value="tons">Tons</option> 
         </select><br /><br /> 
         <input id="zip" type="text" name="c5" class="zip" tabindex="9" /></br /> 
         <label for="c5">Zip Code</label></br /></br /> 
         <label for="mformat">Newsletter</label></br /></br /> 
         <input type="checkbox" name="mformat" value="html" selected="selected" tabindex="10" /> HTML (iPhone, iPad, Droid)<br /><br /> 
         <input type="checkbox" name="mformat" value="text" tabindex="11" /> TEXT (Best for Blackberry) 
        </div> 
        <div class="button"><input type="image" src="button.jpg" name="submit" value="yes"></div> 
        </form> 
       </div> 
       <div class="right"> 
        <img src="logo.jpg" /> 
        <p>Updating you on today and prepping you for tomorrow.</p> 
        <a href="http://www.url.com">www.url.com</a> 
       </div> 
       <div class="clear"> 
      </div> 
      <div class="logged clear"> 
       <p>Logged in as Some Guy (<a href="#">not you?</a>)</p> 
      </div> 
     </div></div> 
     <div class="footer"></div> 
    </div> 
    <script> 
    $(document).ready(function() { 
     //$('div.wrapper').fadeOut(0); 
     window.fbAsyncInit = function() { 
      FB.init({appId: 'app', status: true, cookie: true}); 
      FB.Canvas.setSize(); 
     }; 
     (function() { 
      var e = document.createElement('script'); e.async = true; 
      e.src = document.location.protocol + 
      '//connect.facebook.net/en_US/all.js'; 
      document.getElementById('fb-root').appendChild(e); 
     }()); 
    }); 
    $('#signoff').submit(function() { 

     var fname = $("input#fname").val(); 
     var lname = $("input#fname").val(); 
     var email = $("input#email").val(); 
     var password = $("input#password").val(); 

     var dataString = 'fname='+ fname + '&lame=' + lname + '&email=' + email + '&password=' + password; 
     // alert(dataString); 
     // return false; 

     $.ajax({ 
     type: "POST", 
     url: "curlsub.php", 
     data: dataString, 
     success: function() { 
      //do some stuff 
     } 
     }); 
     return false; 
    }); 
    </script> 

</body> 
</html> 

Actuellement, ce sera envoyé avec succès les données à l'API PHP externe, mais le iframe (ou mon dossier entier) sur présentation recharge (et affiche un message « succès »).

Répondre

4

Ce que vous voulez faire est de publier une requête AJAX Post sur l'événement submit de votre formulaire. Le rappel de succès de cette demande AJAX Post doit mettre à jour votre interface utilisateur pour alerter l'utilisateur que son message a réussi.

$('#signoff').submit(
    //Ajax post request here 
    //http://api.jquery.com/jQuery.post/ 
    return false; //this stops your page from refreshing 
); 
+0

J'ai mis à jour le code ci-dessus juste pour tester rafraîchir sur soumettre. Toujours rafraîchissant ?? La méthode $ .ajax devrait fonctionner correctement une fois que j'obtiens les variables sans actualisation. –

+0

Supprimez le code PHP en haut de cette page, insérez-le dans un autre script PHP sur votre serveur. L'attribut d'action du formulaire doit être défini sur l'URL relative de ce nouveau script. –

+0

En outre, voyez-vous deux demandes http émises lors de la soumission ou peut-être juste une application FB repeindre? Où est votre entrée de soumission? Utilisez-vous une balise d'entrée avec un type de soumission pour soumettre votre formulaire? –

1

Avez-vous regardé http://api.jquery.com/jQuery.ajax/ ou http://api.jquery.com/jQuery.post/

Le code suivant devrait vous aider à démarrer.

$.ajax({ 
    type: 'POST', 
    url: url, 
    data: data, 
    success: success 
    dataType: dataType 
}); 

url est une chaîne contenant l'URL à laquelle la demande est envoyée.

data est une carte ou une chaîne envoyée au serveur avec la requête.

success est une fonction de rappel qui est exécutée si la requête aboutit. Il devrait prendre trois arguments: (data, textStatus, XMLHttpRequest)

dataType est le type de données attendu du serveur.