XML DOM - Αντικείμενο XMLHttpRequest
- Προηγούμενη σελίδα DOM Text
- Επόμενη σελίδα DOM XMLSerializer
Όνειρο XMLHttpRequest
Το αντικείμενο XMLHttpRequest παρέχει πλήρη πρόσβαση στο πρωτόκολλο HTTP, συμπεριλαμβανομένων των δυνατοτήτων να κάνει αιτήματα POST και HEAD και συνήθεις αιτήματα GET. Το XMLHttpRequest μπορεί να επιστρέψει την απάντηση του διακομιστή Web μεν ή μη ταυτόχρονα, και μπορεί να επιστρέψει περιεχόμενο ως κείμενο ή ως ένα DOM έγγραφο.
Αν και ονομάζεται XMLHttpRequest, δεν περιορίζεται στη χρήση με XML έγγραφα: μπορεί να λαμβάνει οποιαδήποτε μορφή κειμένου.
Το αντικείμενο XMLHttpRequest ονομάζεται AJAX μια κρίσιμη λειτουργία της αρχιτεκτονικής της Web εφαρμογής.
Υποστήριξη περιηγητή
Το XMLHttpRequest λαμβάνει καλή υποστήριξη από όλους τους σύγχρονους περιηγητές. Η μοναδική εξάρτηση του περιηγητή αφορά τη δημιουργία του αντικειμένου XMLHttpRequest. Στα IE 5 και IE 6, πρέπει να χρησιμοποιηθεί η συγκεκριμένη για το IE συνάρτηση κατασκευής ActiveXObject(). Καθώς και στο Όνειρο XMLHttpRequest Το τμήμα που παρουσιάζεται σε αυτό.
W3C Σταандарτισμός
Το αντικείμενο XMLHttpRequest δεν έχει стандарτισθεί, αλλά η W3C έχει ξεκινήσει τη διαδικασία стандарτισμού, το περιεχόμενο αυτού του εγχειριδίου βασίζεται στον πρότυπο εργασίας.
Η τρέχουσα υλοποίηση XMLHttpRequest είναι σχεδόν ομοιόμορφη. Αλλά υπάρχει μικρή διαφορά από το πρότυπο. Για παράδειγμα, μια υλοποίηση μπορεί να επιστρέψει null, ενώ το πρότυπο απαιτεί κενή řetězce, ή μια υλοποίηση μπορεί να ρυθμίζει το readyState σε 3 χωρίς να διασφαλίζει ότι όλες οι κεφαλίδες απάντησης είναι διαθέσιμες.
Πρότυπο
readyState
Στάση της HTTP αίτησης. Όταν δημιουργείται μια XMLHttpRequest για πρώτη φορά, η τιμή αυτής της ιδιότητας ξεκινά από 0 και αυξάνεται μέχρι να ληφθεί η πλήρης HTTP απάντηση.
Κάθε μία από τις 5 στάσεις έχει μια σχετική μη επίσημη ονομασία. Ο παρακάτω πίνακας παρουσιάζει τις στάσεις, τα ονόματα και τις έννοιες τους:
Στάση | Όνομα | Περιγραφή |
---|---|---|
0 | Uninitialized | Κατάσταση�始化. Το αντικείμενο XMLHttpRequest έχει δημιουργηθεί ή έχει επαναμορφωθεί από τη μέθοδο abort(). |
1 | Open | Η μέθοδος open() έχει καλείται, αλλά η μέθοδος send() δεν έχει καλείται. Η αίτηση δεν έχει σταλεί ακόμα. |
2 | Sent | Η μέθοδος Send() έχει καλείται, η HTTP αίτηση έχει σταλεί στον Web διακομιστή. Δεν έχει ληφθεί απάντηση. |
3 | Receiving | Όλες οι κεφαλίδες απάντησης έχουν ληφθεί. Το σώμα απάντησης ξεκινά να λαμβάνεται αλλά δεν έχει ολοκληρωθεί. |
4 | Loaded | Η HTTP απάντηση έχει αποδοθεί πλήρως. |
Η τιμή του readyState δεν μειώνεται, εκτός αν ο φόρος abort() ή open() καλείται κατά τη διάρκεια της επεξεργασίας μιας αίτησης. Καθεξής που αυξάνεται η τιμή αυτής της ιδιότητας, προκαλείται το συμβάν onreadystatechange.
responseText
Π μέχρι τώρα αναληφθείσα απάντηση του διακομιστή (χωρίς κεφαλίδες), ή αν δεν έχει ληφθεί δεδομένα ακόμα, είναι μια κενή řetězce.
Αν το readyState είναι μικρότερο από 3, αυτή η ιδιότητα είναι μια κενή řetězce. Όταν το readyState είναι 3, αυτή η ιδιότητα επιστρέφει το μέχρι τώρα αναληφθέν μέρος της απάντησης. Αν το readyState είναι 4, αυτή η ιδιότητα αποθηκεύει το πλήρες σώμα απάντησης.
Αν η απάντηση περιέχει κεφαλίδα που καθορίζει την κωδικοποίηση χαρακτήρων για το σώμα απάντησης, χρησιμοποιείται αυτή η κωδικοποίηση. Εάν όχι, υποτίθεται ότι χρησιμοποιείται Unicode UTF-8.
responseXML
Απάντηση στην αίτηση, αναλύεται σε XML και χρησιμοποιείται ως Όνειροδράμαεπιστρέφει.
status
από τον διακομιστή HTTP κώδικας κατάστασης,όπως 200 για επιτυχία και 404 για σφάλμα "Not Found". Η ανάγνωση αυτής της ιδιότητας όταν το readyState είναι κάτω από 3 προκαλεί μια εξαίρεση.
statusText
Αυτή η ιδιότητα καθορίζει το κώδικα HTTP του αιτήματος με όνομα αντί για αριθμό. Δηλαδή, όταν ο κώδικας είναι 200, είναι "OK", και όταν είναι 404, είναι "Not Found". όπως και η ιδιότητα status, η ανάγνωση αυτής της ιδιότητας όταν το readyState είναι κάτω από 3 προκαλεί μια εξαίρεση.
Event handler
onreadystatechange
Η συνάρτηση event handler που καλείται κάθε φορά που αλλάζει η τιμή τουreadyState. Μπορεί να καλείται πολλές φορές όταν το readyState είναι 3.
Μέθοδος
abort()
Ακυρώνει την τρέχουσα απάντηση, κλείνει τη σύνδεση και τελειώνει οποιεσδήποτε μη ολοκληρωμένες δραστηριότητες δικτύου.
Αυτή η μέθοδος επαναφέρει το XMLHttpRequest αντικείμενο σε κατάσταση readyState 0 και ακυρώνει όλες τις μη ολοκληρωμένες δραστηριότητες δικτύου. Για παράδειγμα, αν η αίτηση χρειάζεται πολύ χρόνο και η απάντηση δεν είναι απαραίτητη, μπορείτε να καλέσετε αυτή τη μέθοδο.
getAllResponseHeaders()
Επιστρέφει τις κεφαλίδες απαντήσεων HTTP ως μη αναλύσιμη řetězec.
Αν το readyState είναι κάτω από 3, αυτή η μέθοδος επιστρέφει null. Διαφορετικά, επιστρέφει όλες τις κεφαλίδες απαντήσεων HTTP που στάλθηκαν από τον διακομιστή. Οι κεφαλίδες απαντήσεων επιστρέφονται ως μιας μόνο řetězec, μια κεφαλίδα ανά γραμμή. Κάθε γραμμή διαχωρίζεται με την χαρακτήρα "\r\n".
getResponseHeader()
Επιστρέφει την τιμή της καθορισμένης HTTP κεφαλίδας απαντήσεων. Ο παράμετρος είναι το όνομα της κεφαλίδας απαντήσεων που θέλετε να επιστρέψετε. Μπορείτε να χρησιμοποιήσετε οποιαδήποτε κεφαλαία ή πεζά για να καθορίσετε το όνομα της κεφαλίδας, και η σύγκριση με την κεφαλίδα απαντήσεων δεν είναι κεφαλαία-πεζά.
Η τιμή που επιστρέφει αυτή η μέθοδος είναι η τιμή του καθορισμένου HTTP κεφαλίδας απαντήσεων, αν δεν έχει ληφθεί αυτή η κεφαλίδα ή το readyState είναι κάτω από 3, τότε είναι κενή řetězec. Αν ληφθούν πολλαπλές κεφαλίδες με καθορισμένο όνομα, οι τιμές των κεφαλίδων συνδέονται και επιστρέφονται, διαχωρίζοντας τις τιμές των κεφαλίδων με κόμμα και κενό.
open()
Εκείνη η μέθοδος initializes τα παραμέτρων της HTTP αίτησης, όπως η URL και η μέθοδος HTTP, αλλά δεν στέλνει την αίτηση.
send()
Αποστέλλει μια HTTP αίτηση χρησιμοποιώντας τους παραμέτρους που δώθηκαν στην μεθόδο open() και τον επιλογικό σώμα αίτησης που δόθηκε στην μεθόδο.
setRequestHeader()
Θέτει ή προσθέτει μια HTTP αίτηση σε μια ανοιχτή αλλά μη αποσταλμένη.
XMLHttpRequest.open()
Εκκίνηση παραμέτρων HTTP αίτησης
Γραμματική
open(method, url, async, username, password)
Η παράμετρος method είναι η μέθοδος HTTP που χρησιμοποιείται για την αίτηση. Οι τιμές περιλαμβάνουν GET, POST και HEAD.
Η παράμετρος url είναι το σώμα της αίτησης. Οι περισσότεροι περιηγητές υλοποιούν μια πολιτική ασφαλείας της ίδιας πηγής και απαιτούν αυτό το URL να έχει την ίδια ονομασία του διακομιστή και τον αριθμό του portu με το κείμενο που περιέχει το σκοπό.
Η παράμετρος async δείχνει ότι η αίτηση θα εκτελείται ασynchronously. Αν αυτή η παράμετρος είναι false, η αίτηση είναι synchronous και η κλήση στη send() θα阻塞 μέχρι να ληφθεί η απάντηση πλήρως. Αν αυτή η παράμετρος είναι true ή παραλείπεται, η αίτηση είναι asynchronous και συνήθως χρειάζεται έναν处理器 για το συμβάν onreadystatechange.
Οι παραμέτρους username και password είναι προαιρετικές και παρέχουν πιστοποίηση για την άδεια που απαιτείται από το url. Αν καθοριστούν, θα καλύψουν οποιαδήποτε άλλη πιστοποίηση που καθορίζεται από το url.
Σημείωση
Αυτή η μέθοδος initializes τα παραμέτρων της αίτησης για χρήση στη μεθόδο send() αργότερα. Αναστέλλει τη readyState σε 1, διαγράφει όλες τις προηγούμενες καθορισμένες κεφαλίδες αίτησης και όλες τις προηγούμενες κεφαλίδες απαντήσεων, και ρυθμίζει τα παράμετρα responseText, responseXML, status και statusText στις προεπιλεγμένες τους τιμές. Η κλήση αυτής της μεθόδου είναι ασφαλής όταν η readyState είναι 0 (όταν το αντικείμενο XMLHttpRequest δημιουργείται ή η μέθοδος abort() καλείται) και όταν η readyState είναι 4 ( όταν έχει ληφθεί η απάντηση). Όταν καλούνται για οποιαδήποτε άλλη κατάσταση, η συμπεριφορά της μεθόδου open() είναι καθορισμένη.
Η μέθοδος open() δεν έχει άλλες συμπεριφορές εκτός από τη σώωση των παραμέτρων της αίτησης για τη χρήση στη μέθοδο send(), και τη επαναφορά του αντικειμένου XMLHttpRequest για επαναχρησιμοποίηση. Ειδικά να σημειωθεί ότι όταν καλούνται αυτές οι μεθόδους, η υλοποίηση συνήθως δεν ανοίγει μια σύνδεση στο διακομιστή Web.
XMLHttpRequest.send()
Αποστολή μιας HTTP αίτησης
Γραμματική
send(body)
Αν η μέθοδος HTTP που καθορίζεται από την κλήση open() είναι POST ή PUT, η παράμετρος body καθορίζει το σώμα της αίτησης, ως字符串 ή ΌνειροδράμαΑν η αίτηση σώματος δεν είναι απαραίτητη, αυτός ο παράμετρος είναι null. Για οποιαδήποτε άλλη μέθοδο, αυτή η παράμετρος δεν είναι διαθέσιμη και πρέπει να είναι null (κάποιες υλοποιήσεις δεν επιτρέπουν την παραλείψη αυτής της παραμέτρου).
Σημείωση
Αυτή η μέθοδος προκαλεί την αποστολή ενός HTTP αιτήματος. Αν δεν έχει προηγουμένως γίνει κλήση open(), ή πιο συγκεκριμένα, αν το readyState δεν είναι 1, η send() θα προκαλέσει μια εξαίρεση. Σε άλλες περιπτώσεις, θα στείλει ένα HTTP αίτημα που αποτελείται από τα εξής τμήματα:
- Η μέθοδος HTTP, η διεύθυνση URL και τα δικαιώματα πρόσβασης που ορίστηκαν στην προηγούμενη κλήση open() (αν υπάρχουν).
- Οι κεφαλίδες αιτήματος που ορίστηκαν στην προηγούμενη κλήση setRequestHeader() (αν υπάρχουν).
- Μεταδίδεται σε αυτή τη μέθοδο Body Παράμετροι.
Μόνο μετά την εκκίνηση του αιτήματος, η send() ρυθμίζει το readyState σε 2 και προκαλεί το event handler onreadystatechange.
Αν το παράμέτρο async της προηγούμενης κλήσης open() είναι false, αυτή η μέθοδος θα εμποδίσει και δεν θα επιστρέψει, μέχρι το readyState να είναι 4 και η απάντηση του διακομιστή να έχει ολοκληρωθεί πλήρως. Αντίθετα, αν το παράμέτρο async είναι true ή παραλείπεται, η send() επιστρέφει αμέσως και, όπως θα γίνει γνωστό αργότερα, η απάντηση του διακομιστή θα χειριστεί σε υποβάθμιστη γραμμή εργασίας.
Αν η απάντηση του διακομιστή περιέχει μια HTTP ανακατεύθυνση, η μέθοδος send() ή η υποβάθμιστη γραμμή εργασίας ακολουθεί αυτόματα την ανακατεύθυνση. Όταν έχουν ληφθεί όλες οι κεφαλίδες HTTP απάντησης, η send() ή η υποβάθμιστη γραμμή εργασίας ρυθμίζει το readyState σε 3 και προκαλεί το event handler onreadystatechange. Αν η απάντηση είναι μεγάλη, η send() ή η υποβάθμιστη γραμμή εργασίας μπορεί να προκαλέσει το event handler onreadystatechange στο status 3: αυτό μπορεί να χρησιμοποιηθεί ως δείκτης προόδου λήψης. Τελικά, όταν η απάντηση ολοκληρώνεται, η send() ή η υποβάθμιστη γραμμή εργασίας ρυθμίζει το readyState σε 4 και προκαλεί το event handler για τελευταία φορά.
XMLHttpRequest.setRequestHeader()
Γραμματική
setRequestHeader(name, value)
Το παράμέτρο name είναι το όνομα της κεφαλίδας που πρέπει να οριστεί. Αυτό το παράμέτρο δεν πρέπει να περιλαμβάνει κενά, διπλούς δακτυλους ή παύσεις γραμμής.
Το παράμέτρο value είναι η τιμή της κεφαλίδας. Αυτό το παράμέτρο δεν πρέπει να περιλαμβάνει παύσεις γραμμής.
Σημείωση
Η μέθοδος setRequestHeader() καθορίζει μια κεφαλίδα HTTP ενός αιτήματος, η οποία πρέπει να περιλαμβάνεται στον αίτημα που θα εκδοθεί μέσω της κλήσης send(). Αυτή η μέθοδος μπορεί να καλείται μόνο όταν το readyState είναι 1, για παράδειγμα, μετά από κλήση open() αλλά πριν από κλήση send().
Αν έχει προηγουμένως οριστεί κεφαλίδα με ορισμένο όνομα, η νέα τιμή αυτής της κεφαλίδας είναι: η προηγούμενη ορισμένη τιμή, προσθέτοντας κόμμα, κενά και την τιμή που καθορίζεται από αυτήν την κλήση.
Αν η κλήση open() ορίζει την πιστοποίηση, το XMLHttpRequest στέλνει αυτόματα μια κατάλληλη κεφαλίδα αιτήματος Authorization. Ωστόσο, μπορείτε να χρησιμοποιήσετε το setRequestHeader() για να προσθέσετε αυτήν την κεφαλίδα. Ανάλογα, αν ο Web server έχει αποθηκεύσει και έχει μεταφέρει ένα cookie που σχετίζεται με την URL που δόθηκε στην κλήση open(), οι κατάλληλες κεφαλίδες Cookie ή Cookie2 περιλαμβάνονται αυτόματα στην αίτηση. Μπορείτε να προσθέσετε αυτά τα cookie στις κεφαλίδες με την κλήση setRequestHeader(). Το XMLHttpRequest μπορεί επίσης να παρέχει μια προεπιλεγμένη τιμή για την κεφαλίδα User-Agent. Αν το κάνει αυτό, οποιαδήποτε τιμή που ορίζετε για αυτήν την κεφαλίδα θα προστεθεί μετά από αυτήν την προεπιλεγμένη τιμή.
Ορισμένες κεφαλίδες αιτήματος από το XMLHttpRequest ορίζονται αυτόματα από το XMLHttpRequest και όχι από αυτό το μέθοδο, για να ταιριάζουν με το πρωτόκολλο HTTP. Αυτό περιλαμβάνει τις κεφαλίδες που σχετίζονται με τους προξενείς:
- Host
- Connection
- Keep-Alive
- Accept-charset
- Accept-Encoding
- If-Modified-Since
- If-None-Match
- If-Range
- Range
- Προηγούμενη σελίδα DOM Text
- Επόμενη σελίδα DOM XMLSerializer