【发布时间】:2018-11-26 14:07:09
【问题描述】:
我正在尝试像这样从 Javascript 调用 Spotify API:
function callAPI() {
var xhttp = new XMLHttpRequest();
xhttp.open('GET', 'https://api.spotify.com/v1/search?q=Muse&type=track');
xhttp.setRequestHeader('Content-Type', 'application/json');
xhttp.setRequestHeader('Authorization', 'Bearer <MY_ACCESS_TOKEN>');
xhttp.send();
var response = JSON.parse(xhttp.responseText);
}
然而,xhttp.responseText 为空,尽管请求返回 200。
我可以在浏览器中看到请求正在返回预期的结果,但不知何故我无法从 Javascript 中提取它:
我尝试使用 Java 调用 REST 端点(因为我更熟悉它)并且成功了:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class Test {
public static void main(String[] args) {
System.out.println("blah");
URL url = null;
try {
url = new URL("https://api.spotify.com/v1/search?q=Muse&type=track");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Authorization", "Bearer <MY_ACCESS_TOKEN>");
String responseMessage = connection.getResponseMessage();
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuffer content = new StringBuffer();
try (reader) {
String line;
while ((line = reader.readLine()) != null) {
content.append(line);
}
} finally {
reader.close();
}
System.out.println("Response: " + responseMessage);
System.out.println("Content: " + content.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}
我是 Javascript 新手,我做错了什么?提前非常感谢!
【问题讨论】:
-
它是一个异步进程。钩入
onload,然后读取responseText -
嗨@lucia-pasarin,不要使用
XMLHttpRequest,我建议您使用jquery 之类的库来执行ajax 请求。见api.jquery.com/jquery.get -
@RuiJarimba 感谢您的建议。你能解释一下使用jQuery的好处吗?
-
@lucia-pasarin 因为它会让你的生活更轻松。与普通 javascript 相比,最大的优势之一是跨浏览器兼容性。检查stackoverflow.com/questions/67045/… 和codementor.io/brainyfarm/…
标签: javascript rest