如何从 JavaScript 调用 REST Web 服务 API?

IT技术 javascript html web-services rest
2021-01-30 11:53:01

我有一个带有按钮的 HTML 页面。当我点击那个按钮时,我需要调用一个 REST Web 服务 API。我试着在网上到处搜索。一点头绪都没有。有人可以给我一个线索/先机吗?非常感谢。

6个回答

我很惊讶没有人提到新的 Fetch API,在撰写本文时,除 IE11 之外的所有浏览器都支持。它简化了您在许多其他示例中看到的 XMLHttpRequest 语法。

API 包含更多内容,但从fetch()方法开始它需要两个参数:

  1. 表示请求的 URL 或对象。
  2. 包含方法、标题、正文等的可选 init 对象。

简单的获取:

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
}

重新创建以前的最佳答案,一个 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
}
@asmaier 您是否得到有关按钮操作外观的答案?谢谢
2021-03-21 11:53:01
button.addEventListener('click', userAction); 或者 <button onclick="userAction()" />
2021-03-23 11:53:01
删除和放置呢?
2021-03-27 11:53:01
有没有办法在 CosmosDB 中的存储过程或 UDF 中使用类似的 javascript?
2021-04-09 11:53:01
此解决方案的按钮操作如何?
2021-04-12 11:53:01

你的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");
}

您的按钮操作::

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

有关更多信息,请访问以下链接(2017 年 1 月 11 日更新)

xhttp.setRequestHeader("Content-type", "application/json");“——这是谎言。您没有将任何 JSON 传递给该send()方法。
2021-03-21 11:53:01
当您尝试使用 Service Workers 时,您会后悔使用 XMLHttpRequest 对象而不是使用 fetch()。fetch() 有 polyfills 可用于旧浏览器。学习使用 fetch()。
2021-03-21 11:53:01
既然是同步调用,就需要调用xhttp.open("POST", "Your Rest URL Here", false);,否则 xhttp.responseText 不会包含结果。但正如之前所说,它很快就会被弃用。
2021-03-27 11:53:01
主线程上的同步 XMLHttpRequest 已被弃用,因为它会对最终用户的体验产生不利影响。如需更多帮助xhr.spec.whatwg.org
2021-04-03 11:53:01
如果这是一个 POST 请求,那么您实际上在哪里发布数据?
2021-04-11 11:53:01

这是另一个使用 json 进行身份验证的 Javascript REST API 调用:

<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>
我也面临同样的 cors 问题..请帮忙
2021-03-24 11:53:01
您没有遇到任何跨域问题吗?我正在从本地主机调用托管在其他地方的 api,它产生了跨域问题。
2021-04-01 11:53:01
@HaritVishwakarma 和 NitinWahale 以及未来的开发人员,您可以仅出于测试目的在本地浏览器上禁用网络安全性 - 这将无法作为生产解决方案使用。参考这里:stackoverflow.com/questions/3102819/...
2021-04-06 11:53:01
@HaritVishwakarma - 如果您调用的 api 没有用于您的域(本地主机)的 Access-Control-Allow-Origin,它会。尝试创建您自己的代理,将请求发送到代理并将请求转发到您的目的地。由于这将是服务器到服务器的通信,因此不会阻止请求(CORS 被浏览器阻止)。发回此响应,并将 allow-origin 标头设置为 all
2021-04-07 11:53:01
    $("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);
        }
      });
});

我认为添加 if (this.readyState == 4 && this.status == 200) 等待更好:

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();
如果客户端和 API 不在同一个域中,那将不起作用,对吗?
2021-04-05 11:53:01