mboost-dp1

jQuery: JSON callback data bliver overskrevet


Gå til bund
Gravatar #1 - markjensen
6. maj 2009 20:25
Hej :)

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
Gravatar #2 - m_abs
6. maj 2009 20:33
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. :)
Gravatar #3 - m_abs
6. maj 2009 20:37
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.
Gravatar #4 - markjensen
6. maj 2009 20:44
Jeg havde bare udeladt følgende:

				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?
Gravatar #5 - m_abs
6. maj 2009 20:49
Prøv at skrive eid ud i php og se svaret i browseren.
Det lyder som om at PHP koden ikke får den rigtige værdi. Hvordan læser du variablen i PHP?
Gravatar #6 - markjensen
6. maj 2009 20:52
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)
Gravatar #7 - markjensen
6. maj 2009 20:57
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
Gravatar #8 - m_abs
6. maj 2009 21:00
Så er der nok en versions eller indstillings forskel mellem dit test miljø og dit webhotel/server.

Du kan prøve at lave et php-script der blot kalder php_info() og køre den begge steder.

EDIT: Funktionen hedder phpinfo();
Gravatar #9 - markjensen
6. maj 2009 21:03
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!
Gravatar #10 - m_abs
6. maj 2009 21:15
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"];
Gravatar #11 - markjensen
6. maj 2009 21:19
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).
Gravatar #12 - m_abs
6. maj 2009 21:30
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.
Gravatar #13 - markjensen
6. maj 2009 21:42
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
Gravatar #14 - m_abs
6. maj 2009 21:55
#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.
Gravatar #15 - markjensen
6. maj 2009 22:20
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.
Gravatar #16 - m_abs
6. maj 2009 22:26
#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.
Gravatar #17 - markjensen
7. maj 2009 14:56
Jeg har testet det igen på den server hvor det skal bruges, og det ser ud til at virke som det skal, så jeg tror jeg lader den ligge der.

Men endnu en gang tak for hjælpen :)
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.

Opret Bruger Login