2013-09-23 2 views
0

Ceci est la suite d'un post précédent, je suis super nouveau à AJAX et en tant que tel continuer à frapper un mur de briques. Anways Je le code suivant:AJAX Appel à partir de plusieurs sélections

<script type='text/javascript'> 
$(document).ready(function(){ 
    $('#view1, #view2, #view3, #view4, #view5, #view6, #view7, #view8, #view9, #view10, #view11, #view12, #view13, #view14, #view15, #view16, #view17, #view18').on('change', 'select', function() {        
     var statusVal = $(this).val(); 
      var job_id = $(this).prop('id'); 
      $.ajax({ 
        type: "POST", 
        url: "saveStatus.php", 
        data: { statusType : statusVal, jobID: job_id }, 
        cache : false, 
        success: function(data) { 
        $('#view1').load('jobs.php #view1', function() {}); 
        $('#view2').load('jobs.php #view2', function() {}); 
        $('#view3').load('jobs.php #view3', function() {}); 
        $('#view4').load('jobs.php #view4', function() {}); 
        $('#view5').load('jobs.php #view5', function() {}); 
        $('#view6').load('jobs.php #view6', function() {}); 
        $('#view7').load('jobs.php #view7', function() {}); 
        $('#view8').load('jobs.php #view8', function() {}); 
        $('#view9').load('jobs.php #view9', function() {}); 
        $('#view10').load('jobs.php #view10', function() {}); 
        $('#view11').load('jobs.php #view11', function() {}); 
        $('#view12').load('jobs.php #view12', function() {}); 
        $('#view13').load('jobs.php #view13', function() {}); 
        $('#view14').load('jobs.php #view14', function() {}); 
        $('#view15').load('jobs.php #view15', function() {}); 
        $('#view16').load('jobs.php #view16', function() {}); 
        $('#view17').load('jobs.php #view17', function() {}); 
        $('#view18').load('jobs.php #view18', function() {}); 
        } 
     }) 
    }); 
    }); 
</script> 

Maintenant, j'ai plusieurs instructions select chacun dans un div avec l'est view1-18, donc 18 divs chacune avec une instruction select, il fonctionne par auto enregistrement de la valeur de la sélection à mon DB, cela fonctionne très bien cependant Je suis sûr que c'est un code mal écrit donc ma première question est d'aider à le faire correctement formaté.

Ma deuxième question est de savoir si je voulais maintenant ajouter deux sélections dans chaque div et que chacune d'entre elles soit sauvegardée dans un autre champ DB. Ci-dessous mon code de sélection:

<select name="status" id="<?php echo str_pad($job->job_id, 6, "0", STR_PAD_LEFT); ?>"> 
     <option value=''>--Select--</option> 
     <option value='Job Approved' <?php if($job->job_schedulestatus == 'Job Approved') echo 'selected'; ?> >Jobs Approved to Print Internally</option> 
     <option value='To Artwork' <?php if($job->job_schedulestatus == 'To Artwork') echo 'selected'; ?> >To Artwork</option> 
    </select> 

Je pensais simplement d'ajouter un autre et de l'appeler « status2 » et la création d'un appel AJAX en double et en renommant quoi que ce soit où il est dit statut STATUS2, Mais cela ne fonctionne pas et je aucune idée d'où aller. J'ai également créé un saveStatus2.php qui aura le code à insérer dans le nouveau champ.

Toute orientation/aide sera grandement appréciée

Ian

+0

Avez-vous besoin mettre à jour très vue chaque fois qu'une sélection est modifiée? Ou avez-vous besoin de simplement mettre à jour la vue actuelle quand une sélection est modifiée? – Vlad

+0

Oui, je dois mettre à jour chaque vue contient des informations basées sur la valeur qui est enregistrée et en changeant, cela pourrait signifier que 2 vues vont changer. – snookian

+0

Pouvez-vous ajouter des classes à vos vues? – Vlad

Répondre

2

Cela semble un peu suspect pour moi - surtout parce que ce que je vois est la chose « de création ajax » en cours. Souvenez-vous que $ .load() est aussi une fonction ajax, donc vous appelez plusieurs événements .load comme rappel de l'événement ajax principal.

Existe-t-il un moyen de consolider cela en un seul appel Ajax, comme dans le premier ajax wrapper que vous avez, puis laissez PHP définir tous les choix pour vous?

Si vous devez parcourir chaque sélection, j'aller dans cette voie pour le rendre un peu plus propre:

for(var i=1; i<19; i++) 
{ 
    $('#view'+i).load('jobs.php#view'+i); //empty callback not needed here as well.. 
} 
+0

Cela fonctionne très bien, toutes les idées sur comment je peux maintenant le faire fonctionner avec deux sélections? – snookian

+1

Affectez une classe à votre select comme class = "select1", même chose pour 2. Ayez le numéro select dans l'ID, comme id = "view1", etc., puis configurez un écouteur de changement pour les sélections. Utiliser le sélecteur de classes dans jquery liera ceci à toutes les sélections avec cette classe. comme $ ('. select1'). on ('clic', function() {id = $ (this) .prop ('id') ....}), puis faites l'appel .load dans ce même rappel ... –

+0

désolé, cela devrait être .on ('change', ... pas 'click' –

0

je ferais quelque chose comme ça ...

// cache the views 
var views = $('.view'); 

$('#view_wrapper').on('change', 'select', function() { 
    var statusVal = $(this).val(); 
    var job_id = $(this).prop('id'); 
    $.ajax({ 
     type: "POST", 
     url: "saveStatus.php", 
     data: { statusType : statusVal, jobID: job_id }, 
     cache : false, 
     success: function(data) { 
      $(views).eatch(function() { 
       var view_id = $(this).prop('id'); 
       $('#'+view_id).load('jobs.php#'+view_id); 
      }); 
     } 
    }); 
}); 
Questions connexes