无法从并行的ajax调用中检索数据

时间:2014-09-03 19:58:00

标签: javascript jquery ajax

我有一个函数(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(...);
}

2 个答案:

答案 0 :(得分:0)

最后,我通过所有后续调用找到了答案。我从两个动作方法调用一个公共函数,它使用全局变量进行外部URL调用。只需使用以下锁定机制即可使我的关键部分成为线程安全的。

public static object Lock = new object();

lock (Lock) // added for thread safety purpose
{
    response_task = CallExtern(...)
}

答案 1 :(得分:-1)

尝试添加选项

async: false

到ajax对象。