Eu tenho uma página HTML com um botão. Quando clico nesse botão, preciso chamar uma API de serviço web REST. Eu tentei pesquisar online em qualquer lugar. Nenhuma pista. Alguém pode me dar uma vantagem / Headstart sobre isso? Muito apreciado.
Eu tenho uma página HTML com um botão. Quando clico nesse botão, preciso chamar uma API de serviço web REST. Eu tentei pesquisar online em qualquer lugar. Nenhuma pista. Alguém pode me dar uma vantagem / Headstart sobre isso? Muito apreciado.
Respostas:
Estou surpreso que ninguém tenha mencionado a nova API de busca, suportada por todos os navegadores, exceto o IE11, no momento em que este foi escrito. Ele simplifica a sintaxe XMLHttpRequest que você vê em muitos dos outros exemplos.
A API inclui muito mais , mas comece com o fetch()
método São necessários dois argumentos:
GET simples:
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
}
Recriando a resposta superior anterior , um 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
}
button.addEventListener('click', userAction);
ou<button onclick="userAction()" />
Seu 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");
}
Sua ação no botão ::
<button type="submit" onclick="UserAction()">Search</button>
Para mais informações, acesse o seguinte link (Atualizado em 11/01/2017)
xhttp.open("POST", "Your Rest URL Here", false);
, caso contrário, xhttp.responseText não conterá o resultado. Mas, como já foi dito, em breve será preterido.
xhttp.setRequestHeader("Content-type", "application/json");
" - Isso é mentira. Você não está passando nenhum JSON para o send()
método
Aqui está outra chamada à API REST Javascript com autenticação 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>
$("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);
}
});
});
Eu acho que adicionar se (this.readyState == 4 && this.status == 200) esperar é melhor:
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();
Antes de tentarmos colocar alguma coisa no front-end do site, vamos abrir uma conexão com a API. Faremos isso usando objetos XMLHttpRequest, que é uma maneira de abrir arquivos e fazer uma solicitação HTTP.
Criaremos uma variável de solicitação e atribuiremos um novo objeto XMLHttpRequest a ela. Em seguida, abriremos uma nova conexão com o método open () - nos argumentos, especificaremos o tipo de solicitação como GET, bem como a URL do terminal da API. A solicitação é concluída e podemos acessar os dados dentro da função onload. Quando terminarmos, enviaremos a solicitação.
// Crie uma variável de solicitação e atribua um novo objeto XMLHttpRequest a ela. var request = new XMLHttpRequest ()
// Open a new connection, using the GET request on the URL endpoint
request.open('GET', 'https://ghibliapi.herokuapp.com/films', true)
request.onload = function () {
// Begin accessing JSON data here
}
}
// Send request
request.send()
A maneira usual é ir com PHP e ajax. Mas para sua exigência, abaixo funcionará bem.
<body>
https://www.google.com/controller/Add/2/2<br>
https://www.google.com/controller/Sub/5/2<br>
https://www.google.com/controller/Multi/3/2<br><br>
<input type="text" id="url" placeholder="RESTful URL" />
<input type="button" id="sub" value="Answer" />
<p>
<div id="display"></div>
</body>
<script type="text/javascript">
document.getElementById('sub').onclick = function(){
var url = document.getElementById('url').value;
var controller = null;
var method = null;
var parm = [];
//validating URLs
function URLValidation(url){
if (url.indexOf("http://") == 0 || url.indexOf("https://") == 0) {
var x = url.split('/');
controller = x[3];
method = x[4];
parm[0] = x[5];
parm[1] = x[6];
}
}
//Calculations
function Add(a,b){
return Number(a)+ Number(b);
}
function Sub(a,b){
return Number(a)/Number(b);
}
function Multi(a,b){
return Number(a)*Number(b);
}
//JSON Response
function ResponseRequest(status,res){
var res = {status: status, response: res};
document.getElementById('display').innerHTML = JSON.stringify(res);
}
//Process
function ProcessRequest(){
if(method=="Add"){
ResponseRequest("200",Add(parm[0],parm[1]));
}else if(method=="Sub"){
ResponseRequest("200",Sub(parm[0],parm[1]));
}else if(method=="Multi"){
ResponseRequest("200",Multi(parm[0],parm[1]));
}else {
ResponseRequest("404","Not Found");
}
}
URLValidation(url);
ProcessRequest();
};
</script>