Üzerinde bir düğme bulunan bir HTML sayfam var. Bu düğmeyi tıkladığımda bir REST Web Hizmeti API'sını çağırmam gerekiyor. Her yerde çevrimiçi arama yapmayı denedim. Hiçbir ipucu yok. Birisi bana bu konuda yol gösterebilir mi? Çok müteşekkirim.
Üzerinde bir düğme bulunan bir HTML sayfam var. Bu düğmeyi tıkladığımda bir REST Web Hizmeti API'sını çağırmam gerekiyor. Her yerde çevrimiçi arama yapmayı denedim. Hiçbir ipucu yok. Birisi bana bu konuda yol gösterebilir mi? Çok müteşekkirim.
Yanıtlar:
Kimse yazma sırasında IE11 hariç tüm tarayıcılar tarafından desteklenen yeni Fetch API, bahsetmedi şaşırdım. Diğer örneklerin çoğunda gördüğünüz XMLHttpRequest sözdizimini basitleştirir.
API çok daha fazlasını içerir , ancak fetch()
yöntemle başlayın . İki argüman alır:
Basit ALIN:
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
}
Bir önceki üst cevabı yeniden yaratan bir 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);
veya<button onclick="userAction()" />
Javascriptiniz:
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");
}
Düğme eyleminiz ::
<button type="submit" onclick="UserAction()">Search</button>
Daha fazla bilgi için aşağıdaki bağlantıyı inceleyin (Güncellendi 2017/01/11)
xhttp.open("POST", "Your Rest URL Here", false);
, aksi takdirde xhttp.responseText sonucu içermez. Ancak daha önce de belirtildiği gibi, yakında kullanımdan kaldırılacak.
xhttp.setRequestHeader("Content-type", "application/json");
" - Bu bir yalan. send()
Yönteme herhangi bir JSON iletmiyorsunuz .
İşte json kullanarak kimlik doğrulaması ile başka bir Javascript REST API çağrısı:
<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);
}
});
});
Ben beklemek (this.readyState == 4 && this.status == 200) beklemek daha iyi olduğunu düşünüyorum:
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();
Web sitesinin ön ucuna herhangi bir şey koymaya çalışmadan önce, API'yı açalım. Bunu, dosyaları açmanın ve bir HTTP isteği yapmanın bir yolu olan XMLHttpRequest nesnelerini kullanarak yapacağız.
Bir istek değişkeni oluşturacağız ve ona yeni bir XMLHttpRequest nesnesi atayacağız. Ardından, open () yöntemiyle yeni bir bağlantı açacağız - argümanlarda istek türünü GET olarak ve API uç noktasının URL'sini belirteceğiz. İstek tamamlanır ve yükleme fonksiyonu içindeki verilere erişebiliriz. İşimiz bittiğinde, isteği göndeririz.
// Bir istek değişkeni oluşturun ve bu değişkene yeni bir XMLHttpRequest nesnesi atayın. var request = yeni 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()
Her zamanki yol PHP ve ajax ile gitmektir. Ama ihtiyaçlarınız için, aşağıda iyi çalışacaktır.
<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>