我正在使用本地环境在Mac上工作。我拥有所有的API。
我有一个对API执行ajax调用的网页。 (例如http://1.api.loc/v1.0/getSomthing?id=1) 此API使用PHP编码。 API 1再次调用Api 2.(http://2.api.loc/v1.0/getSomthingSpecific?id=1)
第二次调用是在PHP中使用curl完成的。 即使使用此修复程序(add context header)
,我也会使用file_get_content()
获得相同的结果
然后,我的JS代码(Jquery)接收结果,解析它并在我的HTML页面中填充一个表。
我遇到的第一个问题是,当我直接呼叫Api2(通过网络浏览器)时,结果显示在200毫秒。当我调用Api1(调用Api 2)时,结果显示在35秒内。经过一番调查,我发现DNSLookup非常慢。我修改了这个更改我的/etc/hosts
配置。
现在两个API运行良好,并在几毫秒内响应(直接在Web浏览器或curl命令行上调用)。问题出在我的JS代码中。当我进行ajax调用时,需要+30秒才能得到响应。
$.ajax({
type: "GET",
url: "http://1.api.loc/v1.0/getSomething",
data:{'id' : 1},
success: function (data) {
handler(data);
}
});
答案 0 :(得分:0)
异步调用外部API是最好的选择。
当它是用户进程的一部分时,最好显示正在进行呼叫的反馈,并在收到响应后显示呼叫是否已完成,成功或失败。如果可能的话,让用户在等待外部API的反馈时给出其他输入,这会消除“缓慢而痛苦”的感觉。
答案 1 :(得分:0)
我终于找到了答案。 实际上,Api 1以JSON格式响应,而Api2只响应没有特定标头的响应。这就是重点!
在回显结果之前添加这个修复了错误:
header('Content-Type: application/json');
感谢所有人的帮助