source : http://stackoverflow.com/questions/3074380/submit-search-query-get-search-result-without-refresh

Ik heb van deze post de scripts ingebouwd om zonder page refresh een query uit te voeren en te laten zien. ik heb hem een beetje aangepast naar het volgende :



<script type="text/javascript">
	$(function() {
	$('.comments').find('a[href="#"]').on('click',function() {
	var value = $(this).data('elemid');
	$.post('phpfiles/db_query.php',{value:value}, function(data){
	$(".search_results").html(data);
	});
	return false;
	});
});
</script>



met in de php file :



include_once 'mysql.php';
		
		$selectdata = mysql_query("SELECT * FROM Comments");
		
		while($row = mysql_fetch_array($selectdata))
		{
			echo $row['Comment'];
			echo " ";
			echo $_POST['value'];
			echo "</br>";
		}



en in de html :



<a class="readcomments" href="#" data-elemid="'.$row['ID'].'">Show comments</a>



deze code wordt dus uitgevoerd als iemand op de a href klikt en geeft de ID mee als value.

het probleem is nu dat dit script meerdere keren uitgevoerd moet worden omdat het comments op bepaalde posts moet ophalen. Als ik nu in de 1e post op de link klik doet hij het perfect hij geeft alle database resultaten weer met daar achter de ID.

Maar als ik nu in een 2e of 3e post etc... op de link klik staan daar ook wel de database results maar in elke post veranderd nu de ID mee naar de ID van de laatst geklikte post.

weet iemand hoe je dit voorkomt?
Lijkt me logisch. In het stukje PHP staat op regel 9 $_POST['value']. die zal dus telkens hetzelfde zijn. Waarschijnlijk wil je die vervangen hebben voor $row['id'] of iets dergelijks. 'id' is dan een kolomnaam uit je database. Ik ben overigens benieuwd hoe je dan je database hebt opgebouwd want als ik het goed begrijp heb je al een tabel 'Posts' in de database en heb je een tabel 'Comments'. Laat eens zien welke kolommen je hebt van deze twee tabellen.
Volgens mij gaan er meer dingen mis in het script. Als ik het goed begrijp wordt die select query uitgevoerd voor een ajax call. In dat geval zou je maar 1 post moeten terugsturen (lijkt mij) en is je query dus niet correct. Nu selecteer je namelijk alle comments uit je database, terwijl je er neem ik aan maar 1 nodig hebt, of in elk geval alleen de comments die horen bij de betreffende post.

Verder klopt je javascript ook niet. Je hebt nu:

var value = $(this).data('elemid');

Alleen de .data() functie in jQuery zorgt ervoor dat je data kunt opslaan en ophalen bij een HTML element. Het leest geen attributen uit wat jij probeert te doen. Als je de waarde wilt hebben van data-elemid dan moet je dat via de .attr() functie doen:

var value = $(this).attr('data-elemid');
Frank : ik heb inderdaad de tables Posts en Comments in de database staan.
momenteel staat er even een testquery in het php bestand later wordt deze query aangepast dat hij alleen alle comments select die bij die post horen. Dan wordt dus de gekeken of de MainPostID gelijk is aan de ID van de post.

Erwin : Bedankt voor de tip over de .Data had me er nog niet heel veel in verdiept maar het is nu duidelijk.

Het script is oorspronkelijk bedoeld voor een zoek veldje met live query results als je op de knop klikt dus dan hoeft hij inderdaad maar één keer een resultaat terug te sturen.

Toevoeging op 18/05/2014 13:37:09:

ik heb die var value veranderd en in mijn phpfile de $_POST['value'] veranderd naar $row['ID'] maar het probleem is nog steeds dat hij een div meerdere keren op het scherm zet met daarin de echo van de php file en die query veranderd elke keer dat je op een knop klikt ivm de value die anders wordt en dit wordt dan in elke div aangepast terwijl dit alleen in de div van die post moet en niet allemaal

Toevoeging op 18/05/2014 13:55:45:

heb het voor elkaar gekregen met wat jij zei frank , heb met die id wat geprobeerd en het werkt.


heb nu :



$("#readcomment" + value).html(data);



en in de html :



<div class="search_results" id="readcomment'.$row['TextPostID'].'"></div>



dus alles heeft nu een aparte ID en wordt apart aangepakt.

thanks alot Frank en Erwin!

Reageren