将ajax调用字符串转换为实际的延迟对象,是否可能?

时间:2016-10-31 14:32:50

标签: jquery asp.net-mvc promise

是否可以转换字符串,如" $。ajax(...)"到一个实际的对象?

我使用带有ajax调用的C#生成一个List,以应用于jQuery $ .when()。

arrCalls = ["$.ajax({ url: 'url....' })",
 "$.ajax({ url: 'url....' })"];

$.when.apply($, arrCalls)
.then(...

但这不起作用。我认为因为这些值不是实际的延迟而是字符串。

我是否需要保留这些丑陋的代码,还是可以以某种方式重构它?

$.when(
   @foreach (var item in splitted)
   {
    <text>
    $.ajax(
    '@Html.Raw(Model.GetHost(ViewBag.Foo, ViewBag.Bar))' + '@item', {
        context: { item: '@item' }
    })

    @if (i != count)
    {
       <text>,</text>
    }
    </text>

    i++;
})
.then(function() {
...

2 个答案:

答案 0 :(得分:1)

您可以将调用存储在数组中的ajax方法(将被延迟)并调用

这应该有用。

timeSeries = pd.DataFrame({'2014-05-01': {'property1': 1, 'property2': 2},
                           '2014-05-02': {'property1': 3, 'property2': 4}}).T
timeSeries['property1']
# 2014-05-01    1
# 2014-05-02    3
# Name: property1, dtype: int64

答案 1 :(得分:1)

作为替代方案,并且由于您不需要此示例中的返回值,您还可以使用以下技巧进行并行承诺:

$(function () {

    var arrUrls = ['@Url.Action("Add")', '@Url.Action("StudentLookup")'];

    var promise; // undefined is a resolved promise to $.when()

    $.each(arrUrls,function(a, url) {
        promise = $.when(promise, $.ajax({
             url: url // Set other properties as needed.
        }));
    });

    promise.then(function() {
            console.log('all done');
    });

});

开销非常小,比使用apply随处可见的传统数组处理示例更简单。

正如我在评论中提到的,你最好只将最小的JS注入视图(数据属性或全局变量),并将大部分JS留在单独的文件中(更容易调试并使用捆绑等)。