来自REST API的XHTTP请求

时间:2017-11-12 20:09:32

标签: javascript asp.net api

我有这个API

[HttpGet("data")]
public dynamic GetData(){
    return context.DataTable.ToList();
}

我尝试使用此代码段在我的Javascript上调用它;

function getData(){
    var xhttp = XMLHttpRequest();
    xhttp.open("GET", "api/myclass/data", true);
    xhttp.setRequestHeader("Content-type","application/json");
    xhttp.send();
    var resp = xhttp.responseText;
}

但是,它只返回空XMLHttpRequest

我认为URL有什么问题。我如何能够将API调用到我的Javascript中?

2 个答案:

答案 0 :(得分:1)

请求可能需要一段时间才能收到回复,因此您必须等待。这样的事情。

function getData(){
    var xhttp = XMLHttpRequest();
    xhttp.open("GET", "api/myclass/data", true); //the request is asynchronous
    xhttp.onreadystatechange = function(){
       if(this.readyState == 4 && this.state == 200){ //**this** is xhttp
          //data are received and ready to use
          var resp = this.responseText;
          //do whatever you want with resp but never try to **return** it from the function
       }
    }
    xhttp.setRequestHeader("Content-type","application/json");
    xhttp.send();
    //var resp = xhttp.responseText; //too early ;(
}

答案 1 :(得分:1)

由于你没有回答你的回答,我认为你的后端有问题。但是,这是一个功能解决方案的样本:



<!DOCTYPE html>
<html>
<body>

<h2>Using the XMLHttpRequest Object</h2>

<div id="demo">
<button type="button" onclick="loadXMLDoc()">Change Content</button>
</div>

<script>
function loadXMLDoc() {
  var xhttp = new XMLHttpRequest();
  xhttp.onreadystatechange = function() {
     console.log("Status is: "+this.status);
    if (this.readyState == 4 && this.status == 200) {
      document.getElementById("demo").innerHTML =
      this.responseText;
    }
  };
  xhttp.open("GET", "xmlhttp_info.txt", true);
  xhttp.send();
}
</script>

</body>
</html>
&#13;
&#13;
&#13;

您可以找到更多信息here。但是在行

xhttp.open("GET", "api/myclass/data", true);

第二个参数是ur服务器中文件的地址。你确定你的格式正确吗? ur data文件的扩展名是什么。

我猜,后端和前端都应该重新考虑。要做到这一点:

  1. 尝试使用postman发送reuqest到后端
  2. 在前端使用我的回答检查回复状态
  3. 要确保使用

    创建async = false

    xhttp.open(&#34; GET&#34;,&#34; api / myclass / data&#34;,false);

  4. 因此,@ Alex Kudryashev指出不会有延迟

    解决方案:

    您需要先找到行

    的结果
    console.log("Status is: "+this.status);
    

    在你的浏览器控制台中。

    如果你让responseText为空,可能会因为你从后端发送一个空字符串,(我们不确定因为你没有用邮递员测试你的后端)但是它至关重要知道回应的状态。