2016-07-25 12 views
0

Was ist der einfachste Weg, um einen asynchronen Serviceanruf zu tätigen? Mein Manager möchte jQuery nicht standardmäßig verwenden, da es bei 80k ziemlich groß ist. Der Async-Aufruf muss in ie8 funktionieren. Wie schwer ist das in normalen js? Oder gibt es eine Untermenge von jQuery oder eine andere bewährte kleine spezialisierte js lib, die gut zu dem passt, wonach ich suche?Was ist der einfachste Weg, um einen asynchronen Service-Aufruf in js zu machen?

+0

Werfen Sie einen Blick auf [reqwest] (https://github.com/ded/reqwest). –

Antwort

0

ich so verwenden tinyxhr in Fällen haben, es zu versuchen (Ich bin nicht der Autor!)

0

Was ist mit einer einfachen Ebene Javascript Anfrage wie diese erhalten?

var request = new XMLHttpRequest(); 
request.open('GET', '/my/url', true); 

request.onreadystatechange = function() { 
    if (this.readyState === 4) { 
    if (this.status >= 200 && this.status < 400) { 
     // Success! 
     var resp = this.responseText; 
    } else { 
     // Error :(
    } 
    } 
}; 

request.send(); 
request = null; 

Quelle: http://youmightnotneedjquery.com/#request

+0

Ich habe mir das nur angesehen, es benötigt IE9 +; das ist der Fall. :) –

+0

@AdamAzad Nein, tut es nicht. Ich habe dir die IE8 + Version gezeigt. Auf der Seite können Sie auswählen, welchen (ie) -Browser Sie mindestens unterstützen müssen und das ist die IE8-Version. – MattDiMu

1

Es ist ziemlich einfach. Sie können diesen Beispielcode hier verwenden, aber beachten Sie. Es skaliert nicht! Asynchrones Programmieren wird sehr schnell sehr komplex. Wenn Sie zwei oder drei asynchrone Anrufe haben, die sich vermischen (auf der Datenebene des Servers stören), denken Sie besser zweimal darüber nach, was Sie tun.

Möglicherweise möchten Sie eine asynchrone Jobwarteschlange auf dem Client haben, so dass Aufrufe noch asynchron sind, aber in der richtigen Reihenfolge ausgeführt werden. Dies geschieht am besten mit Versprechungen.

Dies ist ein Beispiel AJAX-Aufruf:

function send(data, callback) 
{ 
    var xhr; 

    xhr = new XMLHttpRequest(); 
    xhr.onreadystatechange = function() { 
    if (xhr.readyState === 4 && xhttp.status === 200) 
    { 
     callback(xhr.responseText); 
    } 
    }; 

    xhr.open("GET", "http://..../route/to/your/service/port", true); 
    xhr.send(); 
} 

Verwenden Sie es auf der Callback-Funktion, wie dies, indem man:

send({ "hello": "world" }, function (response) { 
    document.getElementById("response").innerText = response; 
}); 
+0

Wie wäre es 'callback.apply (this, arguments)' zu übergeben, was OP will, :) und zu prüfen, ob die Art des Rückrufs eine Funktion ist? –

+0

einfacher ist besser. Wenn das nur sein Code ist, wird Callback eine Funktion sein (warum würde er sich verletzen?). Wenn es Framework-Code ist, den andere dann konsumieren, dann tue besser alle notwendigen Prüfungen. – pid

+0

@pid Danke für den Beispielcode und warnt vor Skalierbarkeit. Hier ist der Hauptanwendungsfall: Ich entwickle eine js-Framework-Komponente, um Warnungen anzuzeigen. Diese Komponente ruft beim Laden der Seite einen Benachrichtigungsdienst auf, um nach neuen Benachrichtigungen zu suchen. verschiedene Entwickler werden einen Verweis auf diese js-Komponente auf ihren Websites hinzufügen. Dieser Dienst wird asynchron und unabhängig einmal pro Seite geladen. Daher sollten Komplexität und Skalierbarkeit bei der Verwendung nativer xhr keine Rolle spielen, richtig? – user6604655

0

Es gibt viele JavaScript Mikro Bibliotheken XHR Funktionalität gewidmet, aber wenn Sie sind an jQuery gewöhnt und mögen es, können Sie einfach Ihre eigenen Build erstellen und andere Module ausschließen, die Sie nicht benötigen (das wird natürlich seine Größe erheblich reduzieren):

https://github.com/jquery/jquery#modules

Auch können Sie diese Website verwenden für Ihre eigene benutzerdefinierte Version Aufbau:

http://projects.jga.me/jquery-builder/

Das GZip Ergebnis für Sie um 17Kb sein würde.

+0

Ich denke, dass sein Chef keine JQuery sagte. – pid

+0

@pid - Der Grund war jedoch aufgrund seiner Größe. Mein Punkt war, wenn er nicht benötigte Module ausschloss, die kein Problem mehr sein würden. – david

+0

Warum die unten ohne Kommentar abstimmen? – david

Verwandte Themen