【发布时间】:2012-11-12 00:40:52
【问题描述】:
我正在尝试使用 AJAX 向我的服务器发出 HTTP 请求,但在我的服务器中将有两个 curl 请求。
其中一个会更快,我可以只向前端发送一个 JSON,当我有另一个响应时发送另一个 JSON? 如何通过 AJAX 捕获第一个和第二个 JSON?
谢谢。
【问题讨论】:
-
您是说要发送两个 AJAX 请求吗?您是要并发(同时)发送,还是顺序发送(一个接一个)?
我正在尝试使用 AJAX 向我的服务器发出 HTTP 请求,但在我的服务器中将有两个 curl 请求。
其中一个会更快,我可以只向前端发送一个 JSON,当我有另一个响应时发送另一个 JSON? 如何通过 AJAX 捕获第一个和第二个 JSON?
谢谢。
【问题讨论】:
只有一个请求(通过 AJAX 触发),但对该请求有两个响应(来自服务器)。有可能吗?
不,这是不可能的。 HTTP 是一种请求-响应协议。每个请求都会得到一个响应。您的页面用户不需要知道已发送多个请求。他们不会注意到的。
您可以在服务器端修复它。您的服务器端应该获取这两个请求,等待它们完成,然后从这两个请求中组合一个答案。该组合答案可以发送给客户端。这样一来,客户端和服务器之间就有一个请求-响应,而您的服务器和第三方之间有两个请求-响应。
澄清一下,你会得到以下结果:
browser server 3rd party
request
|---------------->|
| | proxy
| | req1
| |----------------->|
| |<-----------------|
| | req2
| |----------------->|
| response |<-----------------|
|<----------------|
我最初的假设是你想做:
browser server 3rd party
request
|---------------->|
| | proxy
| | req1
| |----------------->|
| response |<-----------------|
|<----------------|
| |
| request |
|---------------->|
| | req2
| |----------------->|
| response |<-----------------|
|<----------------|
其中(取决于您的要求)可能被压缩为:
browser 3rd party
request
|---------------->|
| response |
|<----------------|
|
| request
|---------------->|
| response |
|<----------------|
这可能会容易得多。
(开始输入此内容作为您对我上一个答案的评论的评论,但它有点复杂,所以这就是我将其作为单独答案的原因,对此感到抱歉。)
【讨论】:
基本上,Ajax 中的第一个 A 用于异步,因此触发两个不同的请求并期望它们并行运行是默认设置。每个调用都会有一个回调处理程序,如果两个请求都已完成,它可以检查页面上的某些状态对象。所以魔术需要在回调处理程序中发生。
希望对您有所帮助。
【讨论】: