mboost-dp1
jQuery: JSON callback data bliver overskrevet
- Forside
- ⟨
- Forum
- ⟨
- Programmering
Hej :)
Jeg sidder og leger lidt med jQuerys JSON funktion.
Følgende kode driller:
Jeg kører denne funktion flere gange (lige efter hinanden). Åbner jeg php siden med forskellige eid, får jeg forskellige titles, men når jeg kører denne kode, bliver alle titles til den samme (svarende til det der burde komme ved første kald) - også ved alert.
Altså, hvis eid 1 har title = "Title1", eid 2 har title = "Title2" og jeg kører denne kode på de to eid, får jeg Title1 som resultat begge gange.
Er der nogen der kan se hvad jeg gør galt?
På forhånd tak.
Mark
Jeg sidder og leger lidt med jQuerys JSON funktion.
Følgende kode driller:
function setViewImage(eid)
{
$.getJSON("dataretr/element_image_get.php",
{ eid : eid },
function(data){
bla bla
}
else
{
$("#elmcontent"+eid).html(data.title);
}
}
);
}
Jeg kører denne funktion flere gange (lige efter hinanden). Åbner jeg php siden med forskellige eid, får jeg forskellige titles, men når jeg kører denne kode, bliver alle titles til den samme (svarende til det der burde komme ved første kald) - også ved alert.
Altså, hvis eid 1 har title = "Title1", eid 2 har title = "Title2" og jeg kører denne kode på de to eid, får jeg Title1 som resultat begge gange.
Er der nogen der kan se hvad jeg gør galt?
På forhånd tak.
Mark
Prøv at køre din kode gennem jslint http://www.jslint.com/
Du har glemt at kopiere en del af koden med (der mangler starten af if-else), så det er lidt svært at se om du gør noget sært. :)
Du har glemt at kopiere en del af koden med (der mangler starten af if-else), så det er lidt svært at se om du gør noget sært. :)
Der er en ting du kan prøve, installere tilføjelsen "firebug" til firefox og se hvordan kaldet bliver udført.
Når du åbner en side i firefox og du har firebug installeret, så er der et ikon nede i højre side af et insekt klik på det.
Så skal du have "console" aktiveret, under fanen "console" kan du se dine ajax kald både hvilke parametre du sender og hvad du modtager.
På den måde kan du se om du sender de værdier du tror du gør.
Firebug er et af de vigtigste værktøjer for mig i mit arbejde.
Når du åbner en side i firefox og du har firebug installeret, så er der et ikon nede i højre side af et insekt klik på det.
Så skal du have "console" aktiveret, under fanen "console" kan du se dine ajax kald både hvilke parametre du sender og hvad du modtager.
På den måde kan du se om du sender de værdier du tror du gør.
Firebug er et af de vigtigste værktøjer for mig i mit arbejde.
Jeg havde bare udeladt følgende:
Jeg har prøvet at bruge Firebug nu (jeg vidste ikke man kunne se ens ajax kald i den). Den siger at responsen er den samme (hvilket den ikke burde), selvom den sender forskellige eid (og jeg får det rigtige når jeg kører php filen).
Kan det have noget at gøre med at jeg kører den lokalt i Aptana (Eclipse klon til web), som måske fucke det op?
if (data.status == "error")
{
alert('Kunne ikke hente billedet.');
return ;
}
else if (data.status == "no login")
{
alert('Du er ikke logget ind.');
return ;
}
else if (data.status == "empty")
{
}
Jeg har prøvet at bruge Firebug nu (jeg vidste ikke man kunne se ens ajax kald i den). Den siger at responsen er den samme (hvilket den ikke burde), selvom den sender forskellige eid (og jeg får det rigtige når jeg kører php filen).
Kan det have noget at gøre med at jeg kører den lokalt i Aptana (Eclipse klon til web), som måske fucke det op?
med $_GET
Når jeg printer den giver den det rigtige. Jeg prøver lige at smide det hele op på et andet sted (tager lidt tid)
Når jeg printer den giver den det rigtige. Jeg prøver lige at smide det hele op på et andet sted (tager lidt tid)
Okay, nu har jeg lagt det op på en anden server, og der ser det ud til at virke som det skal.. det var da utroligt
Det er PHP 5.2.9 der hvor det virker, og 5.2.5 der hvor det ikke virker. Kender ikke lige de små detaljer i forskellene på versionerne, men jeg synes da det lyder lidt underligt. Men det virker da der hvor det skal køre :) så må jeg lige finde ud af hvordan jeg tester. Du skal have mange tak for hjælpen!
Det var så lidt :)
Jeg vil stadig gerne, hjælpe med at finde en forklaring for hvorfor det ikke virker.
Det er ikke en versions forskel, når det er så tæt på hinanden, men måske noget med indstillingerne selvom jeg ikke kan se hvad kan man sætte så $_GET ikke virker.
Det eneste jeg kan komme på er at safe_mode som kan påvirke input på den måde, men det passer ikke sammen med at du bruger $_GET.
Ikke at jeg tror du gør det forkert, men du laver en variable fra $_GET["eid"], ikke?
$eid = $_GET["eid"];
Jeg vil stadig gerne, hjælpe med at finde en forklaring for hvorfor det ikke virker.
Det er ikke en versions forskel, når det er så tæt på hinanden, men måske noget med indstillingerne selvom jeg ikke kan se hvad kan man sætte så $_GET ikke virker.
Det eneste jeg kan komme på er at safe_mode som kan påvirke input på den måde, men det passer ikke sammen med at du bruger $_GET.
Ikke at jeg tror du gør det forkert, men du laver en variable fra $_GET["eid"], ikke?
$eid = $_GET["eid"];
Jo. Den printer det også som det skal, så jeg tror ikke det er GET der er noget galt med (det virker også hvis jeg kun kører funktionen én gang - det har også virket med andre funktioner (som jeg kun kalder engang), det er kun med dette det stoppede med at virke).
Hvordan bruger du variablen? Jeg går ud fra at du bruger en form for sql, sammensætter du dit sql-statement rigtigt?
$sql = "SELECT something FROM somewhere WHERE id = $eid";
eller
$sql = sprintf( "SELECT something FROM somewhere WHERE id = %d",
mysql_real_escape_string( $eid )
);
Du kan prøve at skrive det færdige SQL statement ud for at se om det passer med hvad du forventer.
$sql = "SELECT something FROM somewhere WHERE id = $eid";
eller
$sql = sprintf( "SELECT something FROM somewhere WHERE id = %d",
mysql_real_escape_string( $eid )
);
Du kan prøve at skrive det færdige SQL statement ud for at se om det passer med hvad du forventer.
Jeg bruger den første model
Når jeg kører php filen får jeg det jeg gerne vil have, så jeg kan ikke se at det skulle være det der er noget galt med. Det virkede jo også på den anden server
Når jeg kører php filen får jeg det jeg gerne vil have, så jeg kan ikke se at det skulle være det der er noget galt med. Det virkede jo også på den anden server
#13
Den første model er sårbar overfor sql-injections medmindre du har tjekket om det rent faktisk er et tal (aner ikke hvordan man gør i PHP). Det kunne også være en streng som "; DROP TABLE users;" som ville slette tablen users.
Grunden til jeg foreslog du kunne prøve at skrive sql'en ud var for at se om variablen er sat rigtigt in i strengen.
Det er det eneste sted jeg kan forestille mig at du kan får det resultat du beskriver. MySQL giver nogle gange nogle sære resultater hvis man skriver sit kald forkert. Hvis det er som jeg tror, så ser sql'en forkert ud.
Den første model er sårbar overfor sql-injections medmindre du har tjekket om det rent faktisk er et tal (aner ikke hvordan man gør i PHP). Det kunne også være en streng som "; DROP TABLE users;" som ville slette tablen users.
Grunden til jeg foreslog du kunne prøve at skrive sql'en ud var for at se om variablen er sat rigtigt in i strengen.
Det er det eneste sted jeg kan forestille mig at du kan får det resultat du beskriver. MySQL giver nogle gange nogle sære resultater hvis man skriver sit kald forkert. Hvis det er som jeg tror, så ser sql'en forkert ud.
Jeg tjekker med is_numeric om det er tal. Jeg ved at jeg burde bruge prepared statements, men.. Ja, der er vel ingen undskyldninger.
Jeg får det rigtige ved udskrivning af sql'en.
Jeg får det rigtige ved udskrivning af sql'en.
#15
Bare du har styr på dine input variabler :)
Hmm, så kan jeg ikke forstå du får det forkerte svar.
Måske er det et spørgsmål cache af kald, prøv at sætte en random variable til dit getJSON kald.
Jeg plejer at brug random : Math.random() til det.
Jeg kan dog ikke forestille mig det er derfor, da getJSON skulle slå cache for kaldet fra.
Bare du har styr på dine input variabler :)
Hmm, så kan jeg ikke forstå du får det forkerte svar.
Måske er det et spørgsmål cache af kald, prøv at sætte en random variable til dit getJSON kald.
Jeg plejer at brug random : Math.random() til det.
Jeg kan dog ikke forestille mig det er derfor, da getJSON skulle slå cache for kaldet fra.
Gå til top
Opret dig som bruger i dag
Det er gratis, og du binder dig ikke til noget.
Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.