2010-08-06 5 views
0

J'ai un dilemme qui semble juste au-delà de mes capacités en ce moment!jQuery, besoin d'aide avec l'appel ajax 'sortreceive' et les vars POST

J'ai un groupe de sortables connectés utilisant la classe 'biglist'. Ce que je veux faire est de lier le rappel sortreceive de #biglist (qui est fait quand une liste reçoit un élément d'un autre) pour prendre la valeur 'boxnum' de l'élément (qui signifie de quelle liste il provient) et exécutez une requête UPDATE en changeant la valeur boxnum de l'identifiant de say 5 (list it come from from) à 7 (liste où il a été traîné) pour que l'état persiste.

Ainsi, l'échange se passerait-il si, comme (environ)

$("#biglist").bind("sortreceive", function(event, ui) { 
    ajax call to boxchange.php 
    create vars to represent elements 'boxnum' value and 'box moved to' value  

}); 

puis à l'intérieur boxchange.php ->

$id = $_POST['id'] 
$box = $_POST['boxnum'] 
->update query SET boxid to new boxid WHERE id = posted ID of element 

J'espère que cela a du sens. Cela semble être une façon assez simple de faire fonctionner mon programme! Toute aide est grandement appréciée.

EDIT: 

Tout nettoyer la fonction pour voir s'il y a des changements qui doivent être apportés à ce (que je sais qu'il ya, parce qu'il semble bâclée) Cette fonction devrait être copié/modifié pour chaque triables séparément mais ça ferait fonctionner le programme au moins!

function ReceiveTwo() 
{ 
$('#sortable2').bind('sortreceive', function(event, ui) 
        { 
         boxnum = $(this).attr('boxnum'); 
         id = $(this).attr('id'); 
         $.ajax 
          ({ 
         url: "boxchange.php", 
         type: "POST", 
         data: boxnum, id, 
         success : function(feedback) 
          { 
          $('#data').html(feedback) 
          } 

          }) 
        }); 
        $('#sortable2').sortable("refresh"); 
}); 
+0

besoin d'une clause TLDR ici – mkoryak

+0

on ne sait pas quelle partie de cela ne fonctionne pas pour vous, aussi vous avez dit "J'ai un groupe de sortables connectés en utilisant la _class_ 'biglist'." mais vous utilisez #biglist il devrait être .biglist s'il s'agit d'une classe. –

+0

Mon diable, j'avais l'impression d'avoir des réponses comme mkoryak. Je me demande comment envoyer deux ensembles de données avec l'appel ajax (la façon dont je l'ai écrit dans cet exemple ne correspond pas à la syntaxe afaik) Je veux boxnum et id définis avant de faire l'appel, donc je sais ce que envoyer, puis après que je spécifie le type de demande (POST), je dois être en mesure d'envoyer les deux valeurs à mon script php pour mettre à jour la base de données. Est-ce que cela a du sens? Sinon, je vais juste réaffirmer mon horrible emprise en posant ces types de questions d'une manière que d'autres comprendront :) – Jordan

Répondre

0

Je pense que la façon dont vous voulez envoyer vos données Javascript à votre script PHP côté serveur utilise un tableau associatif Javascript, comme ceci:

$.ajax({ 
    url: "boxchange.php", 
    type: "POST", 
    data: {'boxnum': boxnum, 'id': id}, 
    success: function(data,status) { ... } 

Votre script « boxchange.php » serait puis pouvoir accéder à ces variables via $ _POST ['boxnum'] et $ _POST ['id'].

Je pense que ce votre objectif, mais je ne suis pas tout à fait sûr ...

+0

Très proche, je dois m'assurer que je définis correctement 'boxnum' avant de l'envoyer dans l'ajax appeler comme 'boxnum'. Donc $ (this) .attr ('id') fonctionne bien pour l'ID actuel de l'élément qui est déplacé - cependant $ (this) .parent.attr ('boxnum') n'attrape pas le numéro de boîte de la liste qui est recevoir l'élément. J'ai besoin de saisir cette variable afin que je puisse l'envoyer à ma requête php pour changer une valeur à ce nombre :) – Jordan

+0

Ok pour être 100% spécifique cette fois! Le programme est «borked» quand il s'agit de la fonction de succès et de la rétroaction. Cela fait que NONE n'affiche rien dans ses listes ... les deux sont juste vides. – Jordan

2
$('#sortable2').bind('sortreceive', function(event, ui) { 
    $.ajax({ 
    url: "boxchange.php", 
    type: "POST", 
    beforesend: function(){ 
     boxnum = $(this).attr('boxnum'); 
     id = $(this).attr('id'); 
    }, 
    data: {'boxnum': boxnum, 'id': id}, 
    success : function(feedback) { 
     $('#data').html(feedback), 
    } 
    }); 
}); 

beforeSend est l'événement qui se déclenche avant l'appel ajax. Je crois que vous pouvez définir vos propriétés pour accomplir ce que vous voulez.