相关疑难解决方法(0)

等待jQuery AJAX响应

我有一个页面,使用被称为100次的jQuery .ajax(async:true),问题是,当它们全部被加载时,我需要系统在继续之前等待所有100个调用返回.我该怎么做?

提前致谢!:)

更新:

这些调用是在for()循环中进行的(其中有100个:))

ajax jquery jquery-deferred

18
推荐指数
1
解决办法
2万
查看次数

多个ajax调用等待最后一个加载,然后执行

我有多个同时运行的ajax查询,我希望它们等待最后一个返回,然后在所有ajax调用上运行成功处理程序.有关简化示例,请考虑:

$.ajax({//ajax call 1
    url:page1.php,
    success: function(data1){
        //do something with data1
    }
});

....

$.ajax({//ajax call 2
    url:page2.php,
    success: function(data2){
        //do something with data2
    }
});
//consider more than just two concurrent requests
Run Code Online (Sandbox Code Playgroud)

假设所有请求都是同时发送的.由于它们是异步的,它们将在不同的时间返回.假设一个请求需要100ms才能返回,另一个请求需要3000毫秒才能返回.我显然不知道哪一个会先返回.它们都以某种方式更新DOM,我希望在一次更新时一次性向观众显示这些更改.我该怎么做呢?

我能想到的最好的方法是将data1和data2保存为全局变量.然后有一个计数器变量,每次返回成功时都会计数.然后,在counter == TOTAL_NUM_REQUESTS调用updateAll()之类的函数时,然后运行所有全局变量并将它们放在需要的位置.但这似乎很乱,容易出错.加上那将是很多全局变量.

我理想的是让成功处理程序在返回时休眠,然后在我将所有这些数据作为返回值进行计数的情况下,向所有这些程序发送唤醒消息并且它们可以继续执行.这似乎是最干净的,但我不知道在javascriptland中有这样的任何功能.

有没有人对此有任何光鲜的想法?

答案更新

感谢Lee,我能够得到一个解决方案.我的解决方案与他的下方类似.我构建了一个async分配给$ .ajax调用的变量列表.最初那些ajax调用的成功处理程序仍然被调用,所以我删除了它们并将它们放在另一个函数中,这个函数随后被when我写的这个块调用.我传递results给这样的函数:

var results = [];
results.push(async1);
results.push(async2);
... for all the results ...

$.when.apply(this, results).done(function() {
   for(var i=0;i<arguments.length;i++){
     dataobject=arguments[i][0]
     if(dataobject.variousattribute)
       mySuccessHandlerFirstGuy(dataobject)
     else if(dataobject.anotherattribute)
       mySuccessHandlerSecondGuy(dataobject)
       //etc ....
   }
};
Run Code Online (Sandbox Code Playgroud)

参数对象花了一些时间来弄清楚它是什么.这是一个2d数组(列表列表).第一个索引表示与给定的ajax请求相对应的返回对象.它似乎是有序的,但最好让你的服务器返回你可以查找的东西并相应地写一个if/else块.然后,在该给定元素中,该列表中似乎有3个元素.第一个是从服务器返回的值,即您想要的值.第二个总是一个字符串success,你可以用它来检查呼叫是否有效.并且该列表中的第三个元素似乎是最初的请求(虽然我不确定).这对我没用. …

ajax jquery

15
推荐指数
1
解决办法
2万
查看次数

jquery:等到所有ajax调用完成然后继续

我的文档中有一些ajax调用.ready()

喜欢 :

for (j=1; j <= 7; j++){
  (function(index) {
    $.getJSON('my.php', {id:index}, 
      function(data) {
         $.each(data, function(index2, array){
         ........
         });  
      });
    })(j)
} 

//DO NOT CONTINUE UNTIL FINISH AJAX CALLS   

 ........
MORE JQUERY CODE
Run Code Online (Sandbox Code Playgroud)

我怎么能强迫它等待而不是继续,直到我们从ajax请求得到所有回调?

javascript ajax jquery wait

14
推荐指数
2
解决办法
2万
查看次数

为什么单个Ajax调用工作正常,但连续的Ajax调用失败?

建立:

我有一个Datatable,每行都是可点击的.单击一行时,将进行ajax调用,返回一些数据.有时,ajax调用需要一些时间,具体取决于返回的数据量.一切正常.

问题:

快速单击行,一个接一个地出现问题.简而言之,在前一个ajax调用返回之前,如果单击该行(即进行了新的ajax调用),则会出现错误.

Uncaught TypeError: Property 'callback' of object [object Window] is not a function 
Run Code Online (Sandbox Code Playgroud)

(ajax调用返回JSONP数据)

它看起来像ajax调用混杂(?),但我不确定这一点.任何人都可以告诉我为什么会这样?

如果需要更多信息来澄清问题,请告诉我.

谢谢

编辑1:

这是一些ajax代码:

            $.ajax({
                type: "GET",
                url: 'http://' + myserver + ':8080/someurl/' + my_param,
                contentType: "application/json",
                dataType: "jsonp",
                jsonpCallback: 'callback',
                success: function(data) {
                // Inside here, I am doing some Datatables stuff.
                var myTable = $('#my_table').dataTable( {
                        "bJQueryUI" : true,
                        "bSort" : false,
                        "bFilter" : false,
                        "bPaginate": true,
                        "bProcessing": true,
                        "bScrollCollapse": true,
                        "bInfo": false,
                        "bDestroy": true,
                        "aaData": samples,
                        "sEmptyTable": "No sample …
Run Code Online (Sandbox Code Playgroud)

java ajax jquery jsonp

8
推荐指数
1
解决办法
3382
查看次数

并行执行许多AJAX请求,并在所有这些请求完成后运行

我正在尝试使用HTML中的JQuery完成以下操作序列.

  • 构建了一个URL列表
  • 每个URL都是使用$ .getJSON(url)并行请求的
  • 等待所有请求完成或失败(可能发生404)
  • 获取所有已完成的JSON请求的数据并执行某些操作.

我构建了下面发布的Java脚本代码.它完美地工作,除非其中一个请求由于404错误而失败:然后,$.when不运行,因为它在请求失败时立即中止.你能以某种方式覆盖ajax请求,所以它们不会失败,而是返回一个空源?

我已经阅读了这篇文章这篇文章,但它没有提供一个解决方案,可以在所有查询完成后运行代码.

function fetchData() {
    queries = [];
    //urls is initialized somewhere else containing all urls
    for(var url in urls) {
        queries.push($.getJSON(url));
    }

    $.when.apply(this, queries).done(function() {
        console.log("Finished all queries, got "+arguments.length+" results");
        //Now arguments is a array containing the results of all requests
    }

    //function returns instantly, no problem!
 }
Run Code Online (Sandbox Code Playgroud)

javascript ajax jquery json

6
推荐指数
1
解决办法
2017
查看次数

我如何等待多个ajax调用从.each循环完成

我正在运行一个更新表上记录的循环,但我需要等待所有记录更新才能继续.

我怎样才能让jquery等到loopselectedrows函数中的所有调用完成?我读过.deferred和.when,但我不知道如何实现.他们似乎都无法处理一系列的调用,如果我在哪里切换到使用ajax帖子的数组.任何帮助将不胜感激.

这是启动它的按钮:

                click:  function () {

                        // validate all rows
                        var $selectedRows = $('#Table1').jtable('selectedRows');                                             
                        LoopSelectedRows($selectedRows, 'Validate');
Run Code Online (Sandbox Code Playgroud)

///等待所有ajax调用完成//然后继续检查

                        // check for any row with an error 
                        var $ValidatedRows = $('#Table1').jtable('selectedRows');
                        var boolCheck = checkValidatedRows($ValidatedRows);                            


                        // if all records are succesfull then add them
                    // else alert user
                        if (boolCheck == true) {
                            LoopSelectedRows($selectedRows, 'Add');
                        }
                        else {
                            alert("Please correct invalid records and try again");
                        }

                }  
Run Code Online (Sandbox Code Playgroud)

这样做的第一件事是从表中获取所有记录并将它们传递给循环函数.

这是循环函数 -

function LoopSelectedRows(SelectedRecords, actionType) {

    if (SelectedRecords.length > 0) {
        //Show selected …
Run Code Online (Sandbox Code Playgroud)

javascript ajax jquery asp.net-mvc-4 jquery-jtable

3
推荐指数
1
解决办法
2702
查看次数

$ .getJSON无法传递到knockout observableArray

我正打算召唤一个返回Json的Api.我试图将这些返回的数据放入一个可淘汰的可观察数组中.我的视图模型如下所示:

var adminData = $.getJSON("/api/administrators");
//console.log(adminData);

var viewModel = {
    administrators: ko.observableArray(adminData)
};

ko.applyBindings(viewModel);
Run Code Online (Sandbox Code Playgroud)

请求通过并返回一个对象,其中包含adminData中的预期数据,但是当我尝试将其添加到ko.observableArray时,我在控制台中得到了这个:初始化可观察数组时传递的参数必须是数组.我无法弄清楚如何将数据转换为数组以进行淘汰赛.

javascript json knockout.js

2
推荐指数
1
解决办法
6731
查看次数

等到jquery ajax请求列表完成?

这问题几乎相同:等到所有jQuery Ajax请求都完成了?

但我的问题是克服:

我正在做很多ajax请求,并将它们保存在一个数组中:

var events = [];

for(var i = 0; i < 10; ++i) {
    events.push($.ajax({...}));
}

$.when(events).done(function() {
   // do something when all requests are done.
});
Run Code Online (Sandbox Code Playgroud)

正如相关问题所述,$ .when方法按顺序获取了一些jqXHR对象,但在这里我想要一个列表.

我在http://api.jquery.com/jQuery.when/#jQuery-when-deferreds中阅读了这些文档,但该方法似乎不支持这种情况(将一个列表传递jqXHR$.when函数)

怎么会这样?Plz的帮助.

javascript ajax jquery

1
推荐指数
1
解决办法
1012
查看次数

如何编写等待3个不同ajax请求响应的事件驱动代码?

我有一个网页,我有3个单独的ajax调用

所有3使用相同的结构:$ .ajax({//这是处理数据和发送邮件url的urp文件:url,

        //POST method is used
        type: "POST",

        //pass the data         
        data: data,     

        //Do not cache the page
        cache: false,

        //success
        success: function (json) {              
Run Code Online (Sandbox Code Playgroud)

我想触发另一个函数,但只有3个单独的ajax调用成功.

我该怎么做呢?

更新:使用$ .when()时我现在遇到问题

我的代码现在看起来像这样:

function mainFunction() {
    $.when(someAjaxCall()).done(function(ajaxResult){
            // after all the pages, covers, and sneaks are uploaded
            // we will now change the status
            //start the ajax
            console.log(ajaxResult);
}

function someAjaxCall() {
    // do something...
    if (someGlobalScopedVariable == true) {
         return $.ajax({
        //this is the php file that processes the data and …
Run Code Online (Sandbox Code Playgroud)

javascript ajax jquery callback

0
推荐指数
1
解决办法
207
查看次数

显示ajax微调器,隐藏页面渲染,直到所有ajax调用完成?

我正在构建一个带有很多ajax调用的Web应用程序,100多个,我用来在我的Web应用程序中注入所有内容.

我希望找到一种隐藏页面并显示ajax微调器的方法,直到所有ajax调用完成...和/或整个应用程序已加载,然后显示该站点.

否则,用户可以导航A.可能无法完全正确呈现的页面,或者当网站在完全加载时刷新到Home时,将导航到中间导航.

我遇到了一个解决方案的胆量,但不知道如何实现.或者将两者放在一起...大学项目到目前为止还没有专业人士,但这看起来很有希望

/sf/answers/982663531/

 $(document).ajaxStop(function () {
      // $.active == 0 
  });
Run Code Online (Sandbox Code Playgroud)

/sf/answers/861919691/

$(document).ajaxStart(function() {
    $.mobile.loading('show');
});

$(document).ajaxStop(function() {
    $.mobile.loading('hide');
});
Run Code Online (Sandbox Code Playgroud)

我怎么能让这个工作?我的ajax调用是在许多.js文件中引用的(app的不同部分)

非常感谢任何帮助!

编辑:使用示例ajax调用

$.ajax(
        {
            url: "http://myurl",
            type: 'get',
            dataType: 'jsonp',
            success: function(data)
            {
                if (data.result == 'success')
                {
                    var previousPageID = "";
                    var currentPageID = "";
                    $.each(data.data, function(key, data)                 //scans through each Lv1 Category, creates a button and page and links thems.
                    {
                        var divLabel = data.label;
                        var pageID = currentPageID + data.label.replace(/\s/g, "");
                        $('#contentPage').append(generateButtons(pageID, divLabel));                                                       //generates …
Run Code Online (Sandbox Code Playgroud)

ajax spinner

0
推荐指数
1
解决办法
1万
查看次数