相关疑难解决方法(0)

你如何使用一组jQuery Deferreds?

我有一个应用程序需要按特定顺序加载数据:根URL,然后是模式,然后最终使用各种数据对象的模式和URL初始化应用程序.当用户导航应用程序时,将加载数据对象,根据模式进行验证并显示.当用户CRUD数据时,模式提供首次通过验证.

我在初始化时遇到问题.我使用Ajax调用来获取根对象$ .when(),然后创建一个promises数组,每个模式对象一个.这样可行.我在控制台中看到了fetch.

然后我看到所有模式的获取,因此每个$ .ajax()调用都有效.fetchschemas()确实返回了一个promises数组.

但是,最终when()子句永远不会触发,并且"DONE"字样永远不会出现在控制台上.jquery-1.5的源代码似乎暗示"null"可以作为传递给$ .when.apply()的对象,因为when()将构建一个内部Deferred()对象来管理列表,如果没有对象是传入

这使用Futures.js.如果不是这样的话,应如何管理jQuery Deferreds数组呢?

    var fetch_schemas, fetch_root;

    fetch_schemas = function(schema_urls) {
        var fetch_one = function(url) {
            return $.ajax({
                url: url,
                data: {},
                contentType: "application/json; charset=utf-8",
                dataType: "json"
            });
        };

        return $.map(schema_urls, fetch_one);
    };

    fetch_root = function() {
        return $.ajax({
            url: BASE_URL,
            data: {},
            contentType: "application/json; charset=utf-8",
            dataType: "json"
        });
    };

    $.when(fetch_root()).then(function(data) {
        var promises = fetch_schemas(data.schema_urls);
        $.when.apply(null, promises).then(function(schemas) {
            console.log("DONE", this, schemas);
        });
    });
Run Code Online (Sandbox Code Playgroud)

jquery jquery-deferred .when

132
推荐指数
3
解决办法
6万
查看次数

推迟与承诺

除了jQuery版本之外,Deferred和Promise有什么区别?

我应该用什么来满足我的需求?我只想打电话给fooExecute().例如,我只需要fooStart()fooEnd()切换html div状态.

//I'm using jQuery v2.0.0
function fooStart() { /* Start Notification */ }
function fooEnd() { /* End Notification */ }
function fooExecute() { /* Execute the scripts */ }

$('#button1').on('click', function() {
    var deferred1 = $.Deferred();
    var promise1 = $.Promise();

    deferred1.???

    promise1.???
});
Run Code Online (Sandbox Code Playgroud)

jquery promise jquery-deferred

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

jQuery推迟了优势?

 $.ajax("example.php").done(function ()
 {
     alert(...);
 }).fail(function ()
 {
     alert(...);
 }).always(function ()
 {
      alert(...);
 });
Run Code Online (Sandbox Code Playgroud)

VS

  $.ajax("example.php",

      success: function ()
      {
          alert('');
      },
      error: function ()
      {
          alert('');
      },
      complete: function ()
      {
          alert('');
      }
  );
Run Code Online (Sandbox Code Playgroud)

对不起,我不能看到任何优势

你能解释一下吗?

或者也许你能举例说明后者无法实现的前者......?

jquery

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

队列AJAX调用

您好我正在做一个横向滚动网站,如:http://vanityclaire.com/

然而,在主页加载之后,我使用jQuery .load()在家里的孩子们中,而不是拥有一个大的HTML文件.

目前我为每个div和ajax in the url位于标题中.但是AJAX返回乱序,并且当我添加更多页面时,不要想用30多个http://请求对服务器进行操作.

我如何同步执行AJAX调用,即在请求之前等待第一个回复,或者甚至一次发送两个.

我一直在淘,也无法弄清楚我需要什么.

这是我的HTML:

<div id="mainLayout" class="fullwidth scrollArea">
    <div class="scrollItems">
      <div id="page-1" class="scrollItem" title="/">
        <div>HOME PAGE CONTENT</div>
      </div>
      <div id="page-2" class="scrollItem" title="/Page2.html">
        <div class="loading"> </div>
      </div>
      <div id="page-3" class="scrollItem" title="/Page3.html">
        <div class="loading"> </div>
      </div>

      <div id="page-4" class="scrollItem" title="/Page4.html">
        <div class="loading"> </div>
      </div>
      <div id="page-5" class="scrollItem" title="/Page5.html">
        <div class="loading"> </div>
      </div>
    </div>
  </div>
Run Code Online (Sandbox Code Playgroud)

我的JS:

function s_loadingInitialPages() {
    var loadingItems = new Array();
    $(".scrollArea .scrollItem").each(function () {
        if ($(this).attr('title') != '/') …
Run Code Online (Sandbox Code Playgroud)

javascript jquery jquery-ui jquery-plugins

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

如何在两个功能之间同步

我有两个函数,当其他函数(一和二)完成时,我想调用第三个函数。我需要将第一个函数和第二个函数称为异步函数。例如

  var func1 = function( do something..... return arr )
  var func2 = function ( do something ..... return arr2 )

   if ( arr.length > 0  && arr2.length > 0 )
       var func3 = function( do something )
Run Code Online (Sandbox Code Playgroud)

我的问题:

  1. 最好的方法是什么?

  2. 如何以异步方式调用函数?

javascript

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

jQuery推迟了ajax缓存

我阅读了关于使用jQuery Deferred的这个问题的最佳答案.

我正在遍历一系列ID.对于每个ID,我需要从ajax请求获取与之相关的数据,或者如果ajax请求之前已成功返回数据,则需要从缓存中获取数据.

在每个循环中,我使用$ .when()来观察getData()是否在处理该ID之前从缓存或成功的ajax调用返回一些内容.目前的问题是ID处理无论如何都要继续进行,而不必等待getData()的ajax成功.

一些伪代码:

var IDs = ["1", "2", "1", "3", "1"]; 
//ID "1" is repeated
//data for "1" should should require ajax get the first time
//subsequent processing should get data for "1" from dataCache

var dataCache = [];

function getData(ID){
    if (/*data for ID in dataCache*/){
        //return data pertaining to ID from dataCache
    } else {
        return $.getJSON("returnJSONDataByID/" + ID, function(resp){
            //push resp data to dataCache
        })
    }
}

for (/*each item i …
Run Code Online (Sandbox Code Playgroud)

javascript jquery jquery-deferred

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