2010-04-18 1 views
2

Je sais qu'un bouton de soumission en HTML peut soumettre un formulaire qui ouvre la page cible, mais comment puis-je provoquer un appel ajax jQuery aux informations POST à ​​une nouvelle page et également afficher la nouvelle page. Je soumets des informations qui sont rassemblées en cliquant sur les éléments (qui basculent une nouvelle classe appelée "select"), puis les identifiants de ces éléments avec la nouvelle classe sont ajoutés à une chaîne et POSTed à la nouvelle page. Cette nouvelle page utilisera ces données pour fournir un résumé des sélections de la page précédente. Je peux actuellement l'obtenir pour POSTER les données à une nouvelle page PHP, mais il semble que la fonction ajax reste simplement sur la page actuelle (ce qui est génial pour certaines choses, mais pas ceci), ne pas rediriger vers la nouvelle page. comment pourrais-je faire cela?Comment créer une fonction jQuery POST pour ouvrir la nouvelle page?

est ici la section de script:

//onload function 
$(function() { 

//toggles items to mark them for purchase 
//add event handler for selecting items 
$(".line").click(function() { 
    //get the lines item number 
    var item = $(this).toggleClass("select").attr("name"); 
    }); 

$('#process').click(function() { 
    var items = []; 

    //place selected numbers in a string  
    $('.line.select').each(function(index){ 
      items.push($(this).attr('name')); 
      }); 

    $.ajax({ 
      type: 'POST', 
      url: 'additem.php', 
      data: 'items='+items, 
      success: function(){ 
       $('#menu').hide(function(){ 
        $('#success').fadeIn();    
        }); 
       } 
      }); 
    }); 
    return false; 
}); 

tous les pointeurs serait génial !! grâce


modifier: merci pour l'aide, je l'ai changé mon script:

//onload function 
    $(function() { 

    //toggles items to mark them for purchase 
    //add event handler for selecting items 
    $(".line").click(function() { 
     //get the lines item number 
     var item = $(this).toggleClass("select").attr("name"); 
     });  

$('#process').click(function() { 
    var items = []; 

    //place selected numbers in a string  
    $('.line.select').each(function(index){ 
      items.push($(this).attr('name')); 
      }); 
    $('#items').attr('value',items); 
    $('#form').submit() 

    }); 
    return false; 
}); 

Répondre

1

d'abord tout ce que je décourageait l'emploi ajax ici comme vous ne l'utilisez pas dans le but pour lequel il est destiné, et vous le forcer à faire un rechargement.

Vous pouvez faire quelque chose comme ça dans le succès de ajax

success: function(){ 
      window.location = "the new url you wanted to load";  
     } 

Edit:

Pourquoi ne pas faire un courrier normal avec l'attribut d'action de forme définie sur la page que vous souhaitez publier sur et vous pouvez accéder à toutes les variables du formulaire dans cette page publiée, ou alternativement vous pouvez concaténer ou stocker dans le tableau toutes vos valeurs et stocker ce tableau dans une variable cachée et accéder à cette variable dans le script publié.

+0

merci pour la réponse. Est-ce que la fonction $ .submit() serait plus appropriée, et si oui, comment envoyer des données calculées jQuery avec un formulaire de cette manière? – ciclistadan

+0

@ciclistadan: Mise à jour de la réponse avec une suggestion –

+0

Donc, il serait préférable d'ajouter la chaîne que je veux POST à ​​un élément de formulaire caché, puis utilisez simplement un bouton de soumission? – ciclistadan

1

Ajax postes par définition ne sera pas à un chargement de page. Mais vous pouvez faire ce que vous voulez dans votre gestionnaire success. Il suffit donc de changer l'emplacement du document il y a:

success: function(){ 
    $('#menu').hide(function(){ 
     $('#success').fadeIn();    
    }); 

    window.location = 'http://www.example.com/elsewhere'; 
} 

Très souvent un POST renverra un HTTP 301 ou 302 redirect. Dans ce cas, vous pouvez obtenir les informations d'en-tête renvoyées à partir de l'objet XHR, qui est transmis dans les fonctions de rappel.

complete: function(xhr) { 
    // assume we got a redirect; the new URL will be in the Location header 
    window.location = xhr.getResponseHeader('Location'); 
} 
+0

cool, semble que je puisse aborder ce problème de façon incorrecte. la seule information que je veux envoyer est l'id de tous les éléments avec une classe spécifique à une nouvelle page, comment ferais-je cela? – ciclistadan

+0

Je ne comprends pas ce que vous entendez par "envoyer ... à une nouvelle page". N'est-ce pas ce que vous faites déjà avec le Ajax POST? – friedo

+0

c'est correct, je POSTE les données et je veux que cette page soit également affichée – ciclistadan

Questions connexes