JQuery olmadan AJAX çağrısı nasıl yapılır?


789

JQuery kullanmadan JavaScript kullanarak AJAX çağrısı nasıl yapılır?


20
Buradaki yanıtların birçoğu readystatechange dinlemeyi önermekle birlikte , modern tarayıcıların artık XMLHttpRequest için yükleme , iptal , ilerleme ve hata olaylarını desteklediğini unutmayın (muhtemelen yalnızca yükü önemsersiniz).
Paul

2
@ImadoddinIbnAlauddin örneğin ana işlevselliği (DOM traversing) gerekli olmadığında.
SET

8
youmightnotneedjquery.com bir sürü saf js örnekleri dahil. ie8 +, ie9 + ve ie10 + için ajax
Sanya_Zol

1
w3schools ajax jquery olmadan adım adım güzel bir giriş var: w3schools.com/js/js_ajax_intro.asp
eli

EHTML'yi de kullanabilirsiniz: github.com/Guseyn/EHTML json'u getirmek ve html öğesine eşlemek için e-json öğesini kullanın
Guseyn Ismayylov

Yanıtlar:


591

"Vanilya" JavaScript ile:

<script type="text/javascript">
function loadXMLDoc() {
    var xmlhttp = new XMLHttpRequest();

    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == XMLHttpRequest.DONE) {   // XMLHttpRequest.DONE == 4
           if (xmlhttp.status == 200) {
               document.getElementById("myDiv").innerHTML = xmlhttp.responseText;
           }
           else if (xmlhttp.status == 400) {
              alert('There was an error 400');
           }
           else {
               alert('something else other than 200 was returned');
           }
        }
    };

    xmlhttp.open("GET", "ajax_info.txt", true);
    xmlhttp.send();
}
</script>

JQuery ile:

$.ajax({
    url: "test.html",
    context: document.body,
    success: function(){
      $(this).addClass("done");
    }
});

1
@Fractaliste xmlhttp.status ile ilgili if bloklarından sonra geri aramaları çağırırsanız, sadece onları orada arayın ve işiniz bitti.
Jay

5
@Wade Gokigooooks "vanilya" JavaScript ile okuduğunda indirmesi gereken bir JavaScript kütüphanesi olduğunu düşündüğünü düşünüyorum. Ayrıca Vanilla JS'den de bahsediyor olabilir .
Trisped

220

Aşağıdaki kod parçasını kullanarak benzer şeyleri kolayca yapabilirsiniz, örneğin:

ajax.get('/test.php', {foo: 'bar'}, function() {});

Parçacık İşte:

var ajax = {};
ajax.x = function () {
    if (typeof XMLHttpRequest !== 'undefined') {
        return new XMLHttpRequest();
    }
    var versions = [
        "MSXML2.XmlHttp.6.0",
        "MSXML2.XmlHttp.5.0",
        "MSXML2.XmlHttp.4.0",
        "MSXML2.XmlHttp.3.0",
        "MSXML2.XmlHttp.2.0",
        "Microsoft.XmlHttp"
    ];

    var xhr;
    for (var i = 0; i < versions.length; i++) {
        try {
            xhr = new ActiveXObject(versions[i]);
            break;
        } catch (e) {
        }
    }
    return xhr;
};

ajax.send = function (url, callback, method, data, async) {
    if (async === undefined) {
        async = true;
    }
    var x = ajax.x();
    x.open(method, url, async);
    x.onreadystatechange = function () {
        if (x.readyState == 4) {
            callback(x.responseText)
        }
    };
    if (method == 'POST') {
        x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    }
    x.send(data)
};

ajax.get = function (url, data, callback, async) {
    var query = [];
    for (var key in data) {
        query.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key]));
    }
    ajax.send(url + (query.length ? '?' + query.join('&') : ''), callback, 'GET', null, async)
};

ajax.post = function (url, data, callback, async) {
    var query = [];
    for (var key in data) {
        query.push(encodeURIComponent(key) + '=' + encodeURIComponent(data[key]));
    }
    ajax.send(url, callback, 'POST', query.join('&'), async)
};

1
Bu gerçekten harika bir başlangıç, ama bence 3nigma'nın cevabında bir şey eksik. Yani, sunucu yanıtını döndürmeden belirli istekleri (tüm olsun ve bazı posta) yapmak ne kadar mantıklı olduğundan emin değilim. Gönderme yönteminin sonuna başka bir satır ekledim - return x.responseText;- ve sonra ajax.sendçağrıların her birini döndürüyorum.
Sam

3
@Sam [tipik olarak] eşzamansız bir istek olarak geri dönemezsiniz. Yanıtı bir geri aramada ele almalısınız.
Petah

@Sam orada bir örnek var:ajax.get('/test.php', {foo: 'bar'}, function(responseText) { alert(responseText); });
Petah

Güzel pasaj. Ancak, query.join('&').replace(/%20/g, '+')bunun yerine olmamalı mı?
afsantos

3
Lütfen bu satırı bir seçenek olarak ekleyerek CORS isteğini de ekleyin. 'xhr.withCredentials = true;'
Akam

131

Bunun oldukça eski bir soru olduğunu biliyorum, ancak şimdi yeni tarayıcılarda yerel olarak mevcut daha güzel bir API var . fetch()Yöntem web isteklerini yapmak için izin verir. Örneğin, aşağıdakilerden bazı json istemek için /get-data:

var opts = {
  method: 'GET',      
  headers: {}
};
fetch('/get-data', opts).then(function (response) {
  return response.json();
})
.then(function (body) {
  //doSomething with body;
});

Daha fazla ayrıntı için buraya bakın.


9
IE ve Edge desteklemediğinden, Getir API'sının "yeni tarayıcılarda" çalıştığını iddia etmek aslında yanlış olur. (Kenar 14, kullanıcının bu işlevi özellikle etkinleştirmesini gerektirir) caniuse.com/#feat=fetch
saluce

7
Burada GitHub'ın çoklu dolgusundan bahsedilmelidir. github.com/github/fetch
TylerY86

7
Sadece <script src="https://cdn.rawgit.com/github/fetch/master/fetch.js"></script>bir şampiyon gibi getir ve kullan.
TylerY86

7
@saluce Artık Edge 14'te varsayılan olarak etkindir (ve IE artık "yeni" tarayıcı değil :-)
Supersharp

1
Mobil cihazda getir'i kullanmayın. Android'de HTTP üstbilgisi alt kasa sorunu var. İOS'ta iyi çalışır.
Kenny Lim

103

Aşağıdaki işlevi kullanabilirsiniz:

function callAjax(url, callback){
    var xmlhttp;
    // compatible with IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = function(){
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200){
            callback(xmlhttp.responseText);
        }
    }
    xmlhttp.open("GET", url, true);
    xmlhttp.send();
}

Benzer çözümleri çevrimiçi olarak şu bağlantılarda deneyebilirsiniz:


Ayrıca istek için bazı giriş değişkenleri eklemek güzel olurdu (xmlhttp.send (request);) 'de kullanılır
Pavel Perna

2
@PavelPerna, buradaki örnek bir olduğu için GET, onları isteğe ekleyebilirsiniz, ancak daha genel olmak için, sizinle birlikteyim, buradaki işleve parametre olarak istek parametrelerini kabul etmek için cevabı güncellemeyi gerçekten düşündüm , ve aynı zamanda yöntemi ( GETveya POST) geçmek , ama beni durduran şey burada mümkün olduğunca çabuk denemek için millet mümkün olduğunca basit tutmak istiyorum. Aslında, mükemmel olmaya çalışıyoruz çünkü çok uzun olduğu için başka cevaplar nefret ediyorum :)
AbdelHady

40

Düz ES6 / ES2015 sürümünde bu versiyona ne dersiniz ?

function get(url) {
  return new Promise((resolve, reject) => {
    const req = new XMLHttpRequest();
    req.open('GET', url);
    req.onload = () => req.status === 200 ? resolve(req.response) : reject(Error(req.statusText));
    req.onerror = (e) => reject(Error(`Network Error: ${e}`));
    req.send();
  });
}

İşlev bir söz verir . İşlevin nasıl kullanılacağı ve döndürdüğü sözü nasıl ele alacağına ilişkin bir örnek :

get('foo.txt')
.then((data) => {
  // Do stuff with data, if foo.txt was successfully loaded.
})
.catch((err) => {
  // Do stuff on error...
});

Bir json dosyası yüklemeniz gerekiyorsa JSON.parse(), yüklenen verileri bir JS Nesnesine dönüştürmek için kullanabilirsiniz .

Ayrıca req.responseType='json'işleve entegre edebilirsiniz ama ne yazık ki bunun için hiçbir IE desteği , bu yüzden sopa ile JSON.parse().


2
XMLHttpRequestSizi kullanarak bir dosyayı yüklemek için zaman uyumsuz bir girişimde bulunun. Bu, kodunuz arka planda yüklenirken kod yürütme işleminizin devam edeceği anlamına gelir. Komut dosyanızdaki dosyanın içeriğini kullanmak için, dosyanın yüklenmesi bittiğinde veya yüklenemediğinde komut dosyanıza söyleyen bir mekanizmaya ihtiyacınız vardır. İşte sözler işte burada . Bu sorunu çözmenin başka yolları da var, ancak vaatlerin en uygun olduğunu düşünüyorum .
Rotareti

@Rotareti Mobil tarayıcılar bu yaklaşımı destekliyor mu?
bodruk

Yalnızca daha yeni tarayıcı sürümleri bunu destekler. Yaygın bir uygulama, kodunuzu en son ES6 / 7 / .. 'de yazmak ve daha iyi tarayıcı desteği için ES5'e geri aktarmak için Babel veya benzerlerini kullanmaktır.
Rotareti

2
@Rotareti Bunun neden 'basit' bir geri aramadan daha uygun olacağını açıklayabilir misiniz? Bu kolaylık eski tarayıcı desteği için aktarılması için ekstra çabaya değer mi?
lennyklb

@LennartKloppenburg Bu cevabın iyi açıkladığını düşünüyorum: stackoverflow.com/a/14244950/1612318 "Bu kolaylık eski tarayıcı desteği için aktarılması için ekstra çabaya değer mi?" Vaatler, ES6 / 7 ile gelen birçok özellikten sadece bir tanesidir . Bir aktarıcı kullanıyorsanız, güncel JS yazabilirsiniz. Buna değer!
Rotareti

38
 var xhReq = new XMLHttpRequest();
 xhReq.open("GET", "sumGet.phtml?figure1=5&figure2=10", false);
 xhReq.send(null);
 var serverResponse = xhReq.responseText;
 alert(serverResponse); // Shows "15"

58
Senkronize arama yapmayın. XhReq.onload kullanın ve geri çağrıları kullanın.
19h

3
@FellowStranger oReq.onload = function () {/*this.responseText*/};
19h

3
@kenansulayman Senkronize çağrıda sorun nedir? Bazen en iyi uyuyor.
Andrii Nemchenko

@Andrey: hiçbir şey, sunucudan yanıt dönene kadar her şeyin yürütülmesini durdurduğunuzu fark ettiğiniz sürece. Hiçbir şey son derece kötü, ama belki de bazı kullanımlar için tam olarak yeterli değil.
mrówa

Ayrıca, sunucu aslında hiçbir nedenle yanıt vermezse, kodunuzun geri kalanı hiçbir zaman çalışmaz.
Rastgele Fil

35

XMLHttpRequest kullanın .

Basit GET isteği

httpRequest = new XMLHttpRequest()
httpRequest.open('GET', 'http://www.example.org/some.file')
httpRequest.send()

Basit POST isteği

httpRequest = new XMLHttpRequest()
httpRequest.open('POST', 'http://www.example.org/some/endpoint')
httpRequest.send('some data')

İsteğe bağlı bir üçüncü argümanla isteğin eşzamansız (true), varsayılan veya senkron (false) olmasını belirtebiliriz.

// Make a synchronous GET request
httpRequest.open('GET', 'http://www.example.org/some.file', false)

Aramadan önce üstbilgileri ayarlayabiliriz httpRequest.send()

httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

Aramadan httpRequest.onreadystatechangeönce bir işleve ayarlayarak yanıtı ele alabilirizhttpRequest.send()

httpRequest.onreadystatechange = function(){
  // Process the server response here.
  if (httpRequest.readyState === XMLHttpRequest.DONE) {
    if (httpRequest.status === 200) {
      alert(httpRequest.responseText);
    } else {
      alert('There was a problem with the request.');
    }
  }
}

1
200'den başka başarılı durumların olduğunu unutmayın örn. 201
Nate Vaughan

30

İle tarayıcıya göre doğru nesneyi alabilirsiniz

function getXmlDoc() {
  var xmlDoc;

  if (window.XMLHttpRequest) {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlDoc = new XMLHttpRequest();
  }
  else {
    // code for IE6, IE5
    xmlDoc = new ActiveXObject("Microsoft.XMLHTTP");
  }

  return xmlDoc;
}

Doğru nesne ile bir GET şu şekilde soyutlanabilir:

function myGet(url, callback) {
  var xmlDoc = getXmlDoc();

  xmlDoc.open('GET', url, true);

  xmlDoc.onreadystatechange = function() {
    if (xmlDoc.readyState === 4 && xmlDoc.status === 200) {
      callback(xmlDoc);
    }
  }

  xmlDoc.send();
}

Ve bir POST:

function myPost(url, data, callback) {
  var xmlDoc = getXmlDoc();

  xmlDoc.open('POST', url, true);
  xmlDoc.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

  xmlDoc.onreadystatechange = function() {
    if (xmlDoc.readyState === 4 && xmlDoc.status === 200) {
      callback(xmlDoc);
    }
  }

  xmlDoc.send(data);
}

18

Ajax ile vaatler dahil etmek ve jQuery hariç bir yol arıyordu. HTML5 Rocks'ta ES6 vaatlerinden bahseden bir makale var . ( Q gibi bir söz kitaplığıyla çoklu doldurabilirsiniz) Makaleden kopyaladığım kod snippet'ini kullanabilirsiniz.

function get(url) {
  // Return a new promise.
  return new Promise(function(resolve, reject) {
    // Do the usual XHR stuff
    var req = new XMLHttpRequest();
    req.open('GET', url);

    req.onload = function() {
      // This is called even on 404 etc
      // so check the status
      if (req.status == 200) {
        // Resolve the promise with the response text
        resolve(req.response);
      }
      else {
        // Otherwise reject with the status text
        // which will hopefully be a meaningful error
        reject(Error(req.statusText));
      }
    };

    // Handle network errors
    req.onerror = function() {
      reject(Error("Network Error"));
    };

    // Make the request
    req.send();
  });
}

Not: Bununla ilgili bir makale de yazdım .


15

Aşağıdaki birkaç örnekten küçük bir kombinasyon ve bu basit parçayı yarattı:

function ajax(url, method, data, async)
{
    method = typeof method !== 'undefined' ? method : 'GET';
    async = typeof async !== 'undefined' ? async : false;

    if (window.XMLHttpRequest)
    {
        var xhReq = new XMLHttpRequest();
    }
    else
    {
        var xhReq = new ActiveXObject("Microsoft.XMLHTTP");
    }


    if (method == 'POST')
    {
        xhReq.open(method, url, async);
        xhReq.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xhReq.setRequestHeader("X-Requested-With", "XMLHttpRequest");
        xhReq.send(data);
    }
    else
    {
        if(typeof data !== 'undefined' && data !== null)
        {
            url = url+'?'+data;
        }
        xhReq.open(method, url, async);
        xhReq.setRequestHeader("X-Requested-With", "XMLHttpRequest");
        xhReq.send(null);
    }
    //var serverResponse = xhReq.responseText;
    //alert(serverResponse);
}

// Example usage below (using a string query):

ajax('http://www.google.com');
ajax('http://www.google.com', 'POST', 'q=test');

VEYA parametreleriniz nesne ise - küçük ek kod ayarı:

var parameters = {
    q: 'test'
}

var query = [];
for (var key in parameters)
{
    query.push(encodeURIComponent(key) + '=' + encodeURIComponent(parameters[key]));
}

ajax('http://www.google.com', 'POST', query.join('&'));

Her ikisi de tamamen tarayıcı + sürüm uyumlu olmalıdır.


Burada for döngüsü içinde hasOwnProperty kullanmaya değer mi?
kibibu

15

JQuery'yi dahil etmek istemiyorsanız, hafif AJAX kütüphanelerini denerim.

Benim favorim reqwest. Sadece 3.4kb ve çok iyi inşa edilmiş: https://github.com/ded/Reqwest

İşte reqwest ile örnek bir GET isteği:

reqwest({
    url: url,
    method: 'GET',
    type: 'json',
    success: onSuccess
});

Şimdi daha hafif bir şey istiyorsanız, microAjax'ı sadece 0.4kb'de deneyeceğim: https://code.google.com/p/microajax/

Tüm kod burada:

function microAjax(B,A){this.bindFunction=function(E,D){return function(){return E.apply(D,[D])}};this.stateChange=function(D){if(this.request.readyState==4){this.callbackFunction(this.request.responseText)}};this.getRequest=function(){if(window.ActiveXObject){return new ActiveXObject("Microsoft.XMLHTTP")}else{if(window.XMLHttpRequest){return new XMLHttpRequest()}}return false};this.postBody=(arguments[2]||"");this.callbackFunction=A;this.url=B;this.request=this.getRequest();if(this.request){var C=this.request;C.onreadystatechange=this.bindFunction(this.stateChange,this);if(this.postBody!==""){C.open("POST",B,true);C.setRequestHeader("X-Requested-With","XMLHttpRequest");C.setRequestHeader("Content-type","application/x-www-form-urlencoded");C.setRequestHeader("Connection","close")}else{C.open("GET",B,true)}C.send(this.postBody)}};

İşte örnek bir çağrı:

microAjax(url, onSuccess);

1
Ben microAjax ile ilgili bir sorun olduğunu düşünüyorum, iki kez çağırdığınızda (çok sayıda “bu” nedeniyle, bence bir çarpışma olmalı). İki "yeni microAjax" demenin iyi bir çözüm olup olmadığını bilmiyorum, değil mi?
Jill-Jênn Vie

13

Eski ama deneyeceğim, belki birisi bu bilgiyi yararlı bulacaktır.

Bu, bir GETistekte bulunmak ve bazı JSONbiçimlendirilmiş verileri almak için gereken minimum kod miktarıdır . Bu yalnızca Chrome , FF , Safari , Opera ve Microsoft Edge'in en son sürümleri gibi modern tarayıcılar için geçerlidir .

const xhr = new XMLHttpRequest();
xhr.open('GET', 'https://example.com/data.json'); // by default async 
xhr.responseType = 'json'; // in which format you expect the response to be


xhr.onload = function() {
  if(this.status == 200) {// onload called even on 404 etc so check the status
   console.log(this.response); // No need for JSON.parse()
  }
};

xhr.onerror = function() {
  // error 
};


xhr.send();

Ayrıca XMLHttpRequest API'sının vaat tabanlı bir yedeği olan yeni Getirme API'sına da göz atın .


9

XMLHttpRequest ()

Yapıcıyı, standart HTTP istek yöntemlerini ( ve gibi ) kullanarak bir sunucuyla etkileşimde bulunmanıza olanak tanıyan XMLHttpRequest()yeni XMLHttpRequest(XHR) bir nesne oluşturmak için kullanabilirsiniz :GETPOST

const data = JSON.stringify({
  example_1: 123,
  example_2: 'Hello, world!',
});

const request = new XMLHttpRequest();

request.addEventListener('load', function () {
  if (this.readyState === 4 && this.status === 200) {
    console.log(this.responseText);
  }
});

request.open('POST', 'example.php', true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
request.send(data);

) (Getirme

fetch()Yöntemi , isteğinize verilen yanıtı temsil eden nesneye Promiseçözümlenen bir yöntem elde etmek için de kullanabilirsiniz Response:

const data = JSON.stringify({
  example_1: 123,
  example_2: 'Hello, world!',
});

fetch('example.php', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
  },
  body: data,
}).then(response => {
  if (response.ok) {
    response.text().then(response => {
      console.log(response);
    });
  }
});

navigator.sendBeacon ()

Öte yandan, yalnızca POSTverileri denemeye çalışıyorsanız ve sunucudan yanıt almanız gerekmiyorsa, en kısa çözüm kullanmak olacaktır navigator.sendBeacon():

const data = JSON.stringify({
  example_1: 123,
  example_2: 'Hello, world!',
});

navigator.sendBeacon('example.php', data);

1
XMLHttpRequest ile Internet Explorer için bile çoğu durumda kapsadığınız için cevaplarınızı gerçekten seviyorum, ancak şu şekilde değiştirmenizi tavsiye ederim: "const data = ...": "var data = ..." (XMLHttpRequest) bu yüzden onunla tamamen uyumlu
Dazag

8

Gönderen youMightNotNeedJquery.com +JSON.stringify

var request = new XMLHttpRequest();
request.open('POST', '/my/url', true);
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
request.send(JSON.stringify(data));

7

Bu yardımcı olabilir:

function doAjax(url, callback) {
    var xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");

    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            callback(xmlhttp.responseText);
        }
    }

    xmlhttp.open("GET", url, true);
    xmlhttp.send();
}

4
<html>
  <script>
    var xmlDoc = null ;

  function load() {
    if (typeof window.ActiveXObject != 'undefined' ) {
      xmlDoc = new ActiveXObject("Microsoft.XMLHTTP");
      xmlDoc.onreadystatechange = process ;
    }
    else {
      xmlDoc = new XMLHttpRequest();
      xmlDoc.onload = process ;
    }
    xmlDoc.open( "GET", "background.html", true );
    xmlDoc.send( null );
  }

  function process() {
    if ( xmlDoc.readyState != 4 ) return ;
    document.getElementById("output").value = xmlDoc.responseText ;
  }

  function empty() {
    document.getElementById("output").value = '<empty>' ;
  }
</script>

<body>
  <textarea id="output" cols='70' rows='40'><empty></textarea>
  <br></br>
  <button onclick="load()">Load</button> &nbsp;
  <button onclick="empty()">Clear</button>
</body>
</html>

4

Bu sadece 4 adımlı kolay bir işlemdir,

Umut ediyorum bu yardım eder

Step 1. XMLHttpRequest nesnesine başvuruyu depola

var xmlHttp = createXmlHttpRequestObject();

Step 2. XMLHttpRequest nesnesini alma

function createXmlHttpRequestObject() {
    // will store the reference to the XMLHttpRequest object
    var xmlHttp;
    // if running Internet Explorer
    if (window.ActiveXObject) {
        try {
            xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {
            xmlHttp = false;
        }
    }
    // if running Mozilla or other browsers
    else {
        try {
            xmlHttp = new XMLHttpRequest();
        } catch (e) {
            xmlHttp = false;
        }
    }
    // return the created object or display an error message
    if (!xmlHttp)
        alert("Error creating the XMLHttpRequest object.");
    else
        return xmlHttp;
}

Step 3. XMLHttpRequest nesnesini kullanarak eşzamansız HTTP isteği yapma

function process() {
    // proceed only if the xmlHttp object isn't busy
    if (xmlHttp.readyState == 4 || xmlHttp.readyState == 0) {
        // retrieve the name typed by the user on the form
        item = encodeURIComponent(document.getElementById("input_item").value);
        // execute the your_file.php page from the server
        xmlHttp.open("GET", "your_file.php?item=" + item, true);
        // define the method to handle server responses
        xmlHttp.onreadystatechange = handleServerResponse;
        // make the server request
        xmlHttp.send(null);
    }
}

Step 4. Sunucudan bir mesaj alındığında otomatik olarak yürütülür

function handleServerResponse() {

    // move forward only if the transaction has completed
    if (xmlHttp.readyState == 4) {
        // status of 200 indicates the transaction completed successfully
        if (xmlHttp.status == 200) {
            // extract the XML retrieved from the server
            xmlResponse = xmlHttp.responseText;
            document.getElementById("put_response").innerHTML = xmlResponse;
            // restart sequence
        }
        // a HTTP status different than 200 signals an error
        else {
            alert("There was a problem accessing the server: " + xmlHttp.statusText);
        }
    }
}

3

tarayıcıda düz JavaScript olarak:

var xhr = new XMLHttpRequest();

xhr.onreadystatechange = function() {
  if (xhr.readyState == XMLHttpRequest.DONE ) {
    if(xhr.status == 200){
      console.log(xhr.responseText);
    } else if(xhr.status == 400) {
      console.log('There was an error 400');
    } else {
      console.log('something else other than 200 was returned');
    }
  }
}

xhr.open("GET", "mock_data.json", true);

xhr.send();

Veya node.js kullanarak modüllerinizi bir araya getirmek için Browserify kullanmak istiyorsanız. Superagent'ı kullanabilirsiniz :

var request = require('superagent');
var url = '/mock_data.json';

 request
   .get(url)
   .end(function(err, res){
     if (res.ok) {
       console.log('yay got ' + JSON.stringify(res.body));
     } else {
       console.log('Oh no! error ' + res.text);
     }
 });

3

İşte JQuery olmadan bir JSFiffle

http://jsfiddle.net/rimian/jurwre07/

function loadXMLDoc() {
    var xmlhttp = new XMLHttpRequest();
    var url = 'http://echo.jsontest.com/key/value/one/two';

    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == XMLHttpRequest.DONE) {
            if (xmlhttp.status == 200) {
                document.getElementById("myDiv").innerHTML = xmlhttp.responseText;
            } else if (xmlhttp.status == 400) {
                console.log('There was an error 400');
            } else {
                console.log('something else other than 200 was returned');
            }
        }
    };

    xmlhttp.open("GET", url, true);
    xmlhttp.send();
};

loadXMLDoc();

3
var load_process = false;
function ajaxCall(param, response) {

 if (load_process == true) {
     return;
 }
 else
 { 
  if (param.async == undefined) {
     param.async = true;
 }
 if (param.async == false) {
         load_process = true;
     }
 var xhr;

 xhr = new XMLHttpRequest();

 if (param.type != "GET") {
     xhr.open(param.type, param.url, true);

     if (param.processData != undefined && param.processData == false && param.contentType != undefined && param.contentType == false) {
     }
     else if (param.contentType != undefined || param.contentType == true) {
         xhr.setRequestHeader('Content-Type', param.contentType);
     }
     else {
         xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
     }


 }
 else {
     xhr.open(param.type, param.url + "?" + obj_param(param.data));
 }

 xhr.onprogress = function (loadTime) {
     if (param.progress != undefined) {
         param.progress({ loaded: loadTime.loaded }, "success");
     }
 }
 xhr.ontimeout = function () {
     this.abort();
     param.success("timeout", "timeout");
     load_process = false;
 };

 xhr.onerror = function () {
     param.error(xhr.responseText, "error");
     load_process = false;
 };

 xhr.onload = function () {
    if (xhr.status === 200) {
         if (param.dataType != undefined && param.dataType == "json") {

             param.success(JSON.parse(xhr.responseText), "success");
         }
         else {
             param.success(JSON.stringify(xhr.responseText), "success");
         }
     }
     else if (xhr.status !== 200) {
         param.error(xhr.responseText, "error");

     }
     load_process = false;
 };
 if (param.data != null || param.data != undefined) {
     if (param.processData != undefined && param.processData == false && param.contentType != undefined && param.contentType == false) {
             xhr.send(param.data);

     }
     else {
             xhr.send(obj_param(param.data));

     }
 }
 else {
         xhr.send();

 }
 if (param.timeout != undefined) {
     xhr.timeout = param.timeout;
 }
 else
{
 xhr.timeout = 20000;
}
 this.abort = function (response) {

     if (XMLHttpRequest != null) {
         xhr.abort();
         load_process = false;
         if (response != undefined) {
             response({ status: "success" });
         }
     }

 }
 }
 }

function obj_param(obj) {
var parts = [];
for (var key in obj) {
    if (obj.hasOwnProperty(key)) {
        parts.push(encodeURIComponent(key) + '=' + encodeURIComponent(obj[key]));
    }
}
return parts.join('&');
}

ajax çağrım

  var my_ajax_call=ajaxCall({
    url: url,
    type: method,
    data: {data:value},
    dataType: 'json',
    async:false,//synchronous request. Default value is true 
    timeout:10000,//default timeout 20000
    progress:function(loadTime,status)
    {
    console.log(loadTime);
     },
    success: function (result, status) {
      console.log(result);
    },
      error :function(result,status)
    {
    console.log(result);
     }
      });

önceki istekleri iptal etmek için

      my_ajax_call.abort(function(result){
       console.log(result);
       });

2

HTML:

<!DOCTYPE html>
    <html>
    <head>
    <script>
    function loadXMLDoc()
    {
    var xmlhttp;
    if (window.XMLHttpRequest)
      {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
      }
    else
      {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
    xmlhttp.onreadystatechange=function()
      {
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
        document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
        }
      }
    xmlhttp.open("GET","1.php?id=99freebies.blogspot.com",true);
    xmlhttp.send();
    }
    </script>
    </head>
    <body>

    <div id="myDiv"><h2>Let AJAX change this text</h2></div>
    <button type="button" onclick="loadXMLDoc()">Change Content</button>

    </body>
    </html>

PHP:

<?php

$id = $_GET[id];
print "$id";

?>

Tek satır kıvırcık parantezlere ihtiyaç duymazsa, Noone IE6 kullanmaz, Bu muhtemelen kopya yapıştırıldı, onreadystatechange yerine onload kullanın, olası özyinelemeli çağrılar için hataları yakalayın, xmlhttp korkunç bir değişken adıdır, sadece x olarak adlandırın.
Süper

1

Saf javascript ile verry iyi bir çözüm burada

/*create an XMLHttpRequest object*/

let GethttpRequest=function(){  
  let httpRequest=false;
  if(window.XMLHttpRequest){
    httpRequest   =new XMLHttpRequest();
    if(httpRequest.overrideMimeType){
    httpRequest.overrideMimeType('text/xml');
    }
  }else if(window.ActiveXObject){
    try{httpRequest   =new ActiveXObject("Msxml2.XMLHTTP");
  }catch(e){
      try{
        httpRequest   =new ActiveXObject("Microsoft.XMLHTTP");
      }catch(e){}
    }
  }
  if(!httpRequest){return 0;}
  return httpRequest;
}

  /*Defining a function to make the request every time when it is needed*/

  function MakeRequest(){

    let uriPost       ="myURL";
    let xhrPost       =GethttpRequest();
    let fdPost        =new FormData();
    let date          =new Date();

    /*data to be sent on server*/
    let data          = { 
                        "name"      :"name",
                        "lName"     :"lName",
                        "phone"     :"phone",
                        "key"       :"key",
                        "password"  :"date"
                      };

    let JSONdata =JSON.stringify(data);             
    fdPost.append("data",JSONdata);
    xhrPost.open("POST" ,uriPost, true);
    xhrPost.timeout = 9000;/*the time you need to quit the request if it is not completed*/
    xhrPost.onloadstart = function (){
      /*do something*/
    };
    xhrPost.onload      = function (){
      /*do something*/
    };
    xhrPost.onloadend   = function (){
      /*do something*/
    }
    xhrPost.onprogress  =function(){
      /*do something*/
    }

    xhrPost.onreadystatechange =function(){

      if(xhrPost.readyState < 4){

      }else if(xhrPost.readyState === 4){

        if(xhrPost.status === 200){

          /*request succesfull*/

        }else if(xhrPost.status !==200){

          /*request failled*/

        }

      }


   }
  xhrPost.ontimeout = function (e){
    /*you can stop the request*/
  }
  xhrPost.onerror = function (){
    /*you can try again the request*/
  };
  xhrPost.onabort = function (){
    /*you can try again the request*/
  };
  xhrPost.overrideMimeType("text/plain; charset=x-user-defined-binary");
  xhrPost.setRequestHeader("Content-disposition", "form-data");
  xhrPost.setRequestHeader("X-Requested-With","xmlhttprequest");
  xhrPost.send(fdPost);
}

/*PHP side
<?php
  //check if the variable $_POST["data"] exists isset() && !empty()
  $data        =$_POST["data"];
  $decodedData =json_decode($_POST["data"]);
  //show a single item from the form
  echo $decodedData->name;

?>
*/

/*Usage*/
MakeRequest();
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.