Matti Mäkitalo: jquery/ajax

Beitrag lesen

Hi,

Es soll von einem Standardhandler (.ashx) Daten angeholt werden (jsonp weil Cross-Domain). Das klappt, jedoch nur verzögert weil jsonp nur asyncron arbeitet. Beispiel:

function loginCheck(suser, sSession)
{
var result = 0;
actUser = suser;
$.ajax({
type: "POST",
url: lServiceUrl,
data: "function=logincheck&user=" + suser + "&session=" + sSession,
dataType: "jsonp",
jsonp: "jsonp_callback",
success: function(respData) {
loginCheckHandler(respData.result);
},
error: function() {
getContent('login',0);
}
});
}


>   
> im "restlichem" Code muss ich nun warten bis die Antwort da ist (loginCheck(..) auf jeder weiteren "Unter"-Seite). Da habe ich die Doku nicht verstanden. Wie mache ich dass? (getContent() ruft den jeweiligen Seiteninhalt ab)  
  
Wie machst du was?  
Oder anders gefragt: weißt du, was JSONP überhaupt macht? Und dass die success- und error-Handler, welche du jQuery übergibst, gar nicht aufgerufen werden?  
  
Damit du einen Anhaltspunkt hast: JSONP bedeutet, dass in dein Document ein script-Element eingefügt wird, dessen Quelle die von dir angegebene URL ist.  
Aus diesem Grund kannst du auch keinen POST-Request machen, da externe Ressourcen \_nur\_ per GET aufgerufen werden können (bzw: das POST wird ignoriert).  
Der Server bettet die Daten, welche du empfangen willst, in einen Funktionsaufruf ein. Die aufzurufende Funktion definiert sich üblicherweise durch einen entsprechenden GET-Parameter, bei dir dann wohl der Parameter "function".  
  
D.h.: der (Remote-)Server liefert eine JS-Ressource zurück, welche etwa so aussieht:  
`logincheck(/* hier die Daten des Servers */);`{:.language-javascript}  
  
Weil die neue Ressource angefordert werden muss, muss das ganze auch asynchron ablaufen.  
Weil jQuery (und das ist kein spezieller Mangel an jQuery, sondern einfach nicht anders möglich mit JSONP) keine Fehler für den Request, welcher durch das Einfügen des Script-Elements entsteht, erhält, ruft es auch deine success- und error-Handler nicht auf.  
  
Bis die Tage,  
Matti

-- 
[Webapplikationen in C++ entwickeln](http://tntnet.org/)