Ik gebruik het volgende sortable script:
http://papermashup.com/drag-drop-with-php-jquery/

DEMO: http://papermashup.com/demos/jquery-drag-drop/

Werkt prima op mijn server, maar ik wil iets veranderen, want ik ga het script ergens in integreren:
Er kunnen - logisch - meerdere mensen op verschillende computers aan de lijst werken.

Nu is het zo dat je iets kunt verplaatsen en er een 'save' wordt uitgevoerd.
Maar ik wil maken dat de lijst ook om de 2 seconden vanzelf geüpdatet wordt, zodat je ook ziet wat anderen eventueel aan de volgorde van de lijst veranderd hebben, in de tijd dat je er ook zelf mee bezig bent.

Hoe maak ik dat? Ik weet dat je AJAX kunt gebruiken, en heb van alles geprobeerd, maar ik vind het lastig om de while loop te tussentijds te updaten...
Je kan een setInterval gebruiken, en dan de "save" method die er al is uitvoeren.

setInterval(save, 2000);
Randy vsf op 21/01/2016 15:57:32

Je kan een setInterval gebruiken, en dan de "save" method die er al is uitvoeren.
setInterval(save, 2000);

Zomaar een vraag: Loop je dan niet de kans dat je oude informatie (her)schrijft terwijl iemand anders het net even eerder heeft aangepast? Opnieuw save lijkt me niet goed, je moet alleen elke 30sec ophalen lijkt mij
Aad B op 21/01/2016 16:27:32

Zomaar een vraag: Loop je dan niet de kans dat je oude informatie (her)schrijft terwijl iemand anders het net even eerder heeft aangepast? Opnieuw save lijkt me niet goed, je moet alleen elke 30sec ophalen lijkt mij



Dan maak je een update functie, die je in die interval gooit.


<script type="text/javascript">
$(document).ready(function(){ 	
	  function slideout(){
  setTimeout(function(){
  $("#response").slideUp("slow", function () {
      });
    
}, 2000);}
	
    $("#response").hide();
	$(function() {
	$("#list ul").sortable({ opacity: 0.8, cursor: 'move', update: function() {
			
			var order = $(this).sortable("serialize") + '&update=update'; 
			$.post("updateList.php", order, function(theResponse){
				$("#response").html(theResponse);
				$("#response").slideDown('slow');
				slideout();
			}); 															 
		}								  
		});
	});

});	
</script>


Als ik het goed heb (ben een leek met Jquery) moet ik er dus het eerste deel van de code om de zoveel tijd heruitvoeren?
Hoe kan ik dat maken?
Een nieuwe functie maken die de actuele data uit de database ophaalt, en bij sterke voorkeur als JSON-formaat wordt opgehaald.
Maar dit sortable ding heeft helemaal geen "state", oftewel, hier is niet voorgeschreven welke elementen op welke positie staan, noch welke gebruikers hier aan bezig zijn. Kortweg: het hele "gedrag" van dit ding is op dit moment ongedefinieerd.

Je zult anders om moeten gaan met deze functionaliteit en dit gedrag verder moeten definiëren, voordat je ook maar kunt overwegen om het zo te maken dat meerdere mensen hier tegelijkertijd aan (verder kunnen) werken (want je zult de "toestand" ook op moeten slaan op een zodanige wijze dat je dit ding later weer kunt initialiseren in die "toestand" zodat je hier weer verder aan kunt werken).
@Randy vsf: Hoe haal ik het opnieuw op?
@Ariën: hoe zie je dat voor je? Heb je een voorbeeld-linkje? Beetje geheimtaal dit voor me...
JSON bedoel je?
Op zich valt het reuze mee: https://nl.wikipedia.org/wiki/JSON
Met [php]json_encode[/php] kan je de array met al je data in een JSON-string zetten. Deze haal je met een AJAX-request op, en kan je vervolgens met jQuery's ParseJSON uitlezen.

Verder heeft Thomas ook gelijk. En wat als iemand nou de sortering aanpast, terwijl jij die ook tegelijkertijd aanpast, en voor de nieuwe interval verstuurt. Ik denk dat het nog vrij gecompliceerd is om dit op deze manier te bewerkstelligen.

Een versie-systeem achtig iets lijkt me stukken betrouwbaarder. Daarin kan je complicaties tussen twee bewerkingen naar mijn idee eenvoudig eruit pikken.
Of je negeert mijn opmerking volkomen en begint vrolijk aan je AJAX functionaliteit te bouwen tot het moment dat je je afvraagt wat je met de data die je binnenkrijgt zou moeten doen.

Hoe "praat" deze met je sortable-ding? Hoe kun je daarmee het uiterlijk updaten met externe informatie? Je zult daartoe een intern data formaat (in JavaScript) moeten afspreken en bijhouden. Dit is de eerdergenoemde "toestand" waar ik het over had.

Maar ga rustig aan de slag, ik hoor wel wanneer je zover bent :).
Sorry, maar ik snap niet precies wat je bedoelt Thomas....
Hoe kan ik intern data formaat afspreken en bijhouden?

Reageren