栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

jQuery Deferred无法正常工作

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

jQuery Deferred无法正常工作

Test
不是递归对象,因此它没有方法
.then()
.when()

一个延迟对象,因此在您调用时为何起作用
.when()

您的

$.ajax()
调用 一个延迟对象,因此,如果您将该
'Test.start()
方法作为方法的一部分返回,则可以添加
.then()
回调

请参见此处的示例
.then()
一旦ajax调用已解决(即返回了其数据
,则将调用该回调,但这不是我认为不是真正正确地使用了延迟对象。我相信以下内容是如何使用的:

function searchTwitter(query){    $.ajax({ url: "http://search.twitter.com/search.json", data: {     q: query }, dataType: 'jsonp', success: function(data){return data;}        })        .then(gotresults)        .then(showDiv)        .fail(showFailDiv);};function gotresults(data) {    alert(data.max_id);}function showDiv() {    $('<div />').html("Results received").appendTo('body');}function showFailDiv() {    $('<div />').html("Results <b>NOT</b> received").appendTo('body');}// Starting can be done with a click:$("#searchTwitter").click(function(){   searchTwitter($("#searchName").val()); });// OR a static call:searchTwitter("ashishnjain");

看到它在 这里 工作

例如,如果要返回的数据,

showDiv()
请将其更改为
showDiv(data)
..


这里是你如何可以创建自己的另一个例子递延对象,而不是依赖于递延对象的的

.ajax()
呼叫。这与您的原始示例有点接近-
例如,如果您希望看到它失败,请
http://DONTsearch.twitter.com/search.json

在此处 将URL更改为
example

var dfr;function search(query) {    $.ajax({        url: "http://search.twitter.com/search.json",        data: { q: query        },        dataType: 'jsonp',        success: function(data){dfr.resolve(data);},        error:  function(){dfr.reject();}    });}Test = {    start: function(){        dfr = $.Deferred();        alert("Starting");        return dfr.promise(); }};function gotresults(data) {    alert(data.max_id);}function showDiv() {    $('<div />').html("Results received").appendTo('body');}function showFailDiv() {    $('<div />').html("Results <b>NOT</b> received").appendTo('body');}Test.start()    .then(search('ashishnjain'))    .then(gotresults)    .then(showDiv)    .fail(showFailDiv);

更新以回答评论:

在版本11中,您不会告诉延迟对象失败,因此它将永远不会调用

.fail()
回调。为了解决这个问题,如果
.fail()

_(
error:.......
)_建议延迟对象失败,请使用ajax解释
error: drf.reject
-这将运行
.fail()
回调。

至于您看到立即

ShowMoreCode()
运行的原因是,这些
.then()
调用是回调,如果您将其传递给函数,则该函数的字符串表示形式如下:
.then(ShowDiv)
一旦轮到回调,回调将查找具有该名称的函数。如果将调用传递给函数
.then(someMoreCode('Ashish'))
,它将运行该函数。尝试一下,更改
.then(showDiv)
为,
.then(showDiv())
您将在代码运行后立即注意到,它将显示中的代码
showDiv()

如果更改

.then(ShowMoreCode('Ashish'))
.then(ShowMoreCode)
,则可以从
$.ajax()
呼叫中访问返回的数据。像这样:

function someMoreCode(name) {    alert('Hello ' + name.query);}

在这里看看:工作与不工作

.fail()



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/418212.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号