¿Cómo llamar a una API de servicio web REST desde JavaScript?

Resuelto Shaik Syed Ali asked hace 8 años • 10 respuestas

Tengo una página HTML con un botón. Cuando hago clic en ese botón, necesito llamar a una API de servicio web REST. Intenté buscar en línea en todas partes. Ni idea alguna. ¿Alguien puede darme una pista/ventaja sobre esto? Muy apreciado.

Shaik Syed Ali avatar May 02 '16 12:05 Shaik Syed Ali
Aceptado

Me sorprende que nadie haya mencionado la nueva API Fetch, compatible con todos los navegadores excepto IE11 al momento de escribir este artículo. Simplifica la sintaxis XMLHttpRequest que se ve en muchos de los otros ejemplos.

La API incluye mucho más , pero comience con el fetch()método. Se necesitan dos argumentos:

  1. Una URL o un objeto que representa la solicitud.
  2. Objeto de inicio opcional que contiene el método, encabezados, cuerpo, etc.

OBTENER simple:

const userAction = async () => {
  const response = await fetch('http://example.com/movies.json');
  const myJson = await response.json(); //extract JSON from the http response
  // do something with myJson
}

Recreando la respuesta principal anterior , un POST:

const userAction = async () => {
  const response = await fetch('http://example.com/movies.json', {
    method: 'POST',
    body: myBody, // string or object
    headers: {
      'Content-Type': 'application/json'
    }
  });
  const myJson = await response.json(); //extract JSON from the http response
  // do something with myJson
}
Brendan McGill avatar Aug 15 '2018 06:08 Brendan McGill

Su Javascript:

function UserAction() {
    var xhttp = new XMLHttpRequest();
    xhttp.onreadystatechange = function() {
         if (this.readyState == 4 && this.status == 200) {
             alert(this.responseText);
         }
    };
    xhttp.open("POST", "Your Rest URL Here", true);
    xhttp.setRequestHeader("Content-type", "application/json");
    xhttp.send("Your JSON Data Here");
}

La acción de tu botón::

<button type="submit" onclick="UserAction()">Search</button>

Para más información ingresa al siguiente enlace (Actualizado el 11/01/2017)

Abhishek avatar May 02 '2016 05:05 Abhishek

Aquí hay otra llamada a la API REST de Javascript con autenticación usando json:

<script type="text/javascript" language="javascript">

function send()
{
    var urlvariable;

    urlvariable = "text";

    var ItemJSON;

    ItemJSON = '[  {    "Id": 1,    "ProductID": "1",    "Quantity": 1,  },  {    "Id": 1,    "ProductID": "2",    "Quantity": 2,  }]';

    URL = "https://testrestapi.com/additems?var=" + urlvariable;  //Your URL

    var xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = callbackFunction(xmlhttp);
    xmlhttp.open("POST", URL, false);
    xmlhttp.setRequestHeader("Content-Type", "application/json");
    xmlhttp.setRequestHeader('Authorization', 'Basic ' + window.btoa('apiusername:apiuserpassword')); //in prod, you should encrypt user name and password and provide encrypted keys here instead 
    xmlhttp.onreadystatechange = callbackFunction(xmlhttp);
    xmlhttp.send(ItemJSON);
    alert(xmlhttp.responseText);
    document.getElementById("div").innerHTML = xmlhttp.statusText + ":" + xmlhttp.status + "<BR><textarea rows='100' cols='100'>" + xmlhttp.responseText + "</textarea>";
}

function callbackFunction(xmlhttp) 
{
    //alert(xmlhttp.responseXML);
}
</script>


<html>
<body id='bod'><button type="submit" onclick="javascript:send()">call</button>
<div id='div'>

</div></body>
</html>
user1713008 avatar Jun 09 '2017 16:06 user1713008
    $("button").on("click",function(){
      //console.log("hii");
      $.ajax({
        headers:{  
           "key":"your key",
     "Accept":"application/json",//depends on your api
      "Content-type":"application/x-www-form-urlencoded"//depends on your api
        },   url:"url you need",
        success:function(response){
          var r=JSON.parse(response);
          $("#main").html(r.base);
        }
      });
});
aayushi avatar Mar 01 '2017 18:03 aayushi

Creo que agregar if (this.readyState == 4 && this.status == 200) esperar es mejor:

var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
       // Typical action to be performed when the document is ready:
        var response = xhttp.responseText;
        console.log("ok"+response);
    }
};
xhttp.open("GET", "your url", true);

xhttp.send();
martinwang1985 avatar Apr 12 '2018 15:04 martinwang1985