2012-04-13 5 views
0
externalCSSContents = []; 

function getExternalCSSContents(){ 
     href = document.styleSheets[0].href; 
     $.post(href, function(result){ 
      externalCSSContents.push(result); 
      alert(externalCSSContents.length); // 1 
     }); 
} 

getExternalCSSContents(); 
alert(externalCSSContents.length); // 0 

Kann jemand erklären Sie mir bitte, warum im Rahmen von $ .post() -Methode Array externalCSSContents lokal ist?

+4

sollte es ein Preis für die 1000000. Person sein, ein fragen Frage „Ajax asynchron“: D – jbabey

+0

@jbabey, die zurück im Jahr 1807 war .... wir sind in der Nähe von 1,000,000,000,000,000,000 – ManseUK

+0

prüfen wenn Ihr Beitrag erfolgreich ist. Laut Abfragedokumenten wird der Rückruf nur bei Erfolg ausgelöst: "Rückruffunktion, die ausgeführt wird, wenn die Anfrage erfolgreich ist." –

Antwort

1

Das ist, weil die Die ajax-Anfrage wurde nicht beendet und Sie alarmieren den Inhalt des Arrays.

Sie könnten dies stattdessen tun.

function getExternalCSSContents(){ 
    href = document.styleSheets[0].href; 
    return $.post(href, function(result){ externalCSSContents.push(result); }); 
} 

$.when(getExternalCSSContents()).then(function(){ 
     alert(externalCSSContents.length); 
}); 
1

AJAX ist asynchron die Post Rückruf nach Alarmierung ausgeführt wird

(ich habe hier heute die Arbeit ‚asynchron‘ so oft getippt jetzt weiß ich, wie man es buchstabiert)

1

Dies ist, weil asynchrone Anfrage. So funktioniert AJAX. Lesen Sie mehr über Ajax auf Wiki zum Beispiel