Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 使用“延迟”获取列表项_Jquery_Ajax_Rest_Sharepoint - Fatal编程技术网

Jquery 使用“延迟”获取列表项

Jquery 使用“延迟”获取列表项,jquery,ajax,rest,sharepoint,Jquery,Ajax,Rest,Sharepoint,我正在处理这个代码。我需要在第一个循环的基础上添加另一个ajax来获取列表项。除非写入警报(“等待”),否则结果不正确 我调用下面的函数两次以获取列表项 function loadRestRequest(url, callback) { var async = true; var res = null; if(callback == null) { async = false; callback = function (data) {

我正在处理这个代码。我需要在第一个循环的基础上添加另一个ajax来获取列表项。除非写入警报(“等待”),否则结果不正确

我调用下面的函数两次以获取列表项

function loadRestRequest(url, callback) {
    var async = true;
    var res = null;
      if(callback == null)
    {
    async = false;
    callback = function (data) {
        res = data.d;
    }
      }
    $.ajax
    url: url,
        typ({
            e: "GET",
            async: async,
            headers: {
                "accept": "application/json;odata=verbose",
            },
            success: callback,
            error: function (error) {
                alert(JSON.stringify(error));
            }
        });
   return res;
}
我用谷歌搜索了这个问题,发现这些函数没有同步。调用wait或sleep函数无法正常工作,因为无法准确估计查询时间。我应该使用$.Deferred,但我不知道如何在loadRestRequest函数中使用它。 我的代码正在sharepoint 2013上运行,用于查询可以利用的异步请求列表

避免
async=false
Per:

从jQuery1.8开始,在jqXHR($.Deferred)中使用async:false是不正确的 不赞成;您必须使用成功/错误/完成回调选项 反而

示例

该示例演示如何链接异步调用(主查询和子查询列表):


我学习异步ajax回调。这有助于我理解done()和then()之间的区别。下面的代码解决了我的问题,所有动作回调都在ajax成功函数中进行,之后在done()中进行一些需要在回调后运行的操作

  loadRestRequest("/_api/Web/lists/GetByTitle('KSF')/items?$filter=Master eq 94 ").done(function (data) {
             $.each(data.d.results, function (idx, val) 
             //do some stuff after first callback  
             ksfId = val.ID;
             loadRestRequest1("/_api/Web/lists/GetByTitle('KPI')/items?$filter=KSF eq " + ksfId).done(function (data){
                             //do some stuff after second callback
                        })       
                    });
            });
代码顶部还使用了两个单独的函数

function loadRestRequest(url) {
    var dfd = $.Deferred();
    $.ajax
    url: url,
        typ({
            e: "GET",
            async: true,
            headers: {
                "accept": "application/json;odata=verbose",
            },
            success: function (data) {
                 //do some stuff that you need result
                dfd.resolve(data);
            },
            error: function (error) {
                alert(JSON.stringify(error));
                dfd.reject(error);
            }
        });
   return dfd;
}


function loadRestRequest1(url) {
    var dfd = $.Deferred();
    $.ajax
    url: url,
        typ({
            e: "GET",
            async: true,
            headers: {
                "accept": "application/json;odata=verbose",
            },
            success: function (data) {
                //do some another stuff that you need result
                dfd.resolve(data);
            },
            error: function (error) {
                alert(JSON.stringify(error));
                dfd.reject(error);
            }
        });
    return dfd;
}

谢谢你,瓦迪姆,我的问题解决了。我在留下注释时没有使用promissions(),代码中使用了resolve()和done()。
function getRequest(url){
   return $.ajax({
     url: url,
     method: "GET",
     headers: { "Accept": "application/json; odata=verbose" },
   });
}



var mainQueryResult = null;
var subQueriesResult = null;
var requestUrl = _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('Site Pages')/items";
getRequest(requestUrl)
.then(function(data){
   mainQueryResult = data.d.results;
   var promises = $.map(data.d.results, function(item) {
         var subRequestUrl = _spPageContextInfo.webAbsoluteUrl + "/_api/web/lists/getbytitle('Site Pages')/items(" + item.Id + ")";   
         return getRequest(subRequestUrl);
   });
   return $.when.apply($, promises); 
})
.then(function(){
    subQueriesResult = $.map(arguments, function (args,idx) {
        return args[0].d; 
    })

    //print results
    console.log(mainQueryResult);
    console.log(subQueriesResult);
});
  loadRestRequest("/_api/Web/lists/GetByTitle('KSF')/items?$filter=Master eq 94 ").done(function (data) {
             $.each(data.d.results, function (idx, val) 
             //do some stuff after first callback  
             ksfId = val.ID;
             loadRestRequest1("/_api/Web/lists/GetByTitle('KPI')/items?$filter=KSF eq " + ksfId).done(function (data){
                             //do some stuff after second callback
                        })       
                    });
            });
function loadRestRequest(url) {
    var dfd = $.Deferred();
    $.ajax
    url: url,
        typ({
            e: "GET",
            async: true,
            headers: {
                "accept": "application/json;odata=verbose",
            },
            success: function (data) {
                 //do some stuff that you need result
                dfd.resolve(data);
            },
            error: function (error) {
                alert(JSON.stringify(error));
                dfd.reject(error);
            }
        });
   return dfd;
}


function loadRestRequest1(url) {
    var dfd = $.Deferred();
    $.ajax
    url: url,
        typ({
            e: "GET",
            async: true,
            headers: {
                "accept": "application/json;odata=verbose",
            },
            success: function (data) {
                //do some another stuff that you need result
                dfd.resolve(data);
            },
            error: function (error) {
                alert(JSON.stringify(error));
                dfd.reject(error);
            }
        });
    return dfd;
}