【发布时间】:2014-09-03 19:58:00
【问题描述】:
我在下面有一个函数(searchTerm),它应该同时从两个 URL 获取数据并在两个调用完成后显示结果。
当我在.when(比如$.ajax(options1))中只使用一个参数调用时,这工作正常,
但由于我需要两者并行的输出,我在 .then 函数中调用 URL 并记录响应 data1 和 data2,但现在在 ajax 调用完成后它不会被调用。
谁能告诉我这种方法是否正确?如果是,那为什么回调没有被执行?
var searchTerm = function() {
var $a = $(this);
var term = $("#searchbox").val();
var options1 = {
url: "someurl1",
contentType: "application/json",
data: JSON.stringify({
searchString: term
}),
type: "post",
dataType: "html"
};
var options2 = {
url: "someurl2",
contentType: "application/json",
data: JSON.stringify({
searchString: term
}),
type: "post",
dataType: "html"
};
$.when($.ajax(options1), $.ajax(options2)).then(function(data1, data2) {
alert("callbacks finished");
});
信息1:
似乎我指定为第一个参数的任何 ajax 调用都因 500 服务器错误而失败。我尝试交换 options1 和 options2,现在使用 options2 的调用失败。
信息2:
我在 options1 和 options2 中提到的 url 指向同一个控制器中的操作方法,它们都返回 (ActionResult) 对象的可等待任务。这可能是这里的问题吗?这些调用是否以某种方式通过异步请求相互阻塞/中断?
信息 3:
试图提供更多细节以供使用。动作方法的定义是这样的 -
public async Task<ActionResult> someurl1(.....){
...
...
return await View(...);
}
【问题讨论】:
-
你可以试试 .done 代替 .then 看看它是否有效?
-
我试过了,但没有任何影响。
-
你检查了网络选项卡是否两个请求都返回成功?
-
我现在检查了一下,似乎第一次调用 ($.ajax(options1)) 正在返回 500 Internal Server Error,但我不知道为什么。为什么这个调用独立工作但在为 .when 指定另一个参数之后却不能正常工作?你能建议可能是什么原因吗?我也在从我这边检查。
-
jsfiddle.net/cnckfzpy 一切正常。分别检查 urls 和 ajax 响应。由于您没有错误状态处理,因此两个调用都必须成功。
标签: javascript jquery ajax