这是不言自明的:
while (...) {
var string='something that changes for each ajax request.';
$.ajax({'type': 'GET','dataType': 'json', 'url': 'get_data.php'}).done(processData);
}
function processData(data) {
// get string into here somehow.
}
Run Code Online (Sandbox Code Playgroud)
如你所见,我需要以某种方式string进入processData.我不能创建一个全局变量,因为string每个ajax请求都不同.所以,问题是,我如何绑定string到我的ajax请求,以便我可以从中访问它processData?
我真的不想附加string到查询并让服务器返回它,但如果这是我唯一的选择,我别无选择.
提前致谢.
我在这里问了一个问题:如果互联网连接可用,则刷新页面,然后@Fabrizio Calderan 使用延迟对象实现提供了一个非常简洁的解决方案,如下所示:
setInterval(function() {
$.when(
$.ajax({
url : "/favicon.ico", /* or other resource */
type : "HEAD"
})
)
.done(function() {
location.reload();
});
}, 120000); /* 120000 ~> 2 minutes */
Run Code Online (Sandbox Code Playgroud)
我的问题是:
因为 ajax 调用将返回 jqXHR ;如果ajax调用失败怎么办?那么ajax的返回类型是什么?仍然是 jqXHR 或 UNDEFINED 或 NULL
并且由于ajax的调用将返回jqXHR,它是一个延迟对象;我可以得出以下结论吗:
延迟对象已解析 ==> jqXHR
或被拒绝==>未定义
问候
我有一个页面,其中我有一个可变数量的AJAX调用,这些调用是在一个公共事件上触发的.AJAX调用本身是更新SQL数据库中的相关字段.完成所有调用后,我想刷新页面,以便它现在反映刚刚进行的更改.
我在这里使用了以下问题/答案到目前为止... jQuery当每个完成时,触发函数
到目前为止,这是我的代码:
var team_update = function(e) {
var $items = $('.sortable-items');
var XHRs = [];
$items.each(function(){
var team_id = $( this ).attr("id");
var data = {
tid: team_id,
users: $('#' + team_id).sortable('toArray')
};
XHRs.push(
$.ajax({
type: "POST",
url: "update.php",
data: data,
complete: function(data){
}
})
);
});
$.when(XHRs).then(function(){
console.log('Refreshing Screen');
$('#content-wrapper').load( 'index.php' );
});
}
Run Code Online (Sandbox Code Playgroud)
我期待发生的事情是$('#content-wrapper').load( 'index.php' );,一旦我的所有ajax()请求完成,就会触发.然而,似乎正在发生的事情是,一旦所有请求都已发送,回调就会触发,不一定在它们完成之后,因此有时我的页面更新仍然有"旧"数据.
下图显示了我在顶部的初始页面加载,可以忽略.显示该问题的接下来的4个条目.有3个POST请求是我的3个ajax调用来更新数据库,最后的GET是页面刷新.在发送了所有3个ajax调用之后,页面刷新GET将触发,但它不会等待最后一个ajax调用在它触发之前完成.因此,它会在前一个ajac调用完成更新数据库之前完成旧数据.

我在这做错了什么?
我正在尝试从本地存储中获取一些数据,但是我想使用的日期是ready。就像是:
// this belongs to a Helper factory
getData: function(){
var deferred = jQuery.Deferred();
setTimeout(function(){
var data = {
description: localStorageService.get('description'),
};
deferred.resolve()
}, 10);
return deferred.promise();
},
// I set it up so that in the controller I can do
// $scope.data = Helper.getData();
Run Code Online (Sandbox Code Playgroud)
类似于我的示例,我只想在data对象具有description本地存储后返回它
我正在使用angularjs,因此{{data}}一旦解决诺言,我想在我的视图中显示。例如可能使用ng-hide或类似的东西。
无论如何,我的问题是关于建立那个诺言。
有任何想法吗?
javascript local-storage jquery-deferred angularjs angular-promise
我正在使用PHP.我想完成jQuery AJAX流程,(完成流程并将数据返回主页面).
然后做下一个jQuery的事情.关于如何做的任何想法?
$.ajax({
url: "page1.php",
dataType: "html",
type: 'POST',
data: "value=" + value,
success: function(data){
//some process
}
});//ajax1
$.ajax({
url: "page2.php",
dataType: "html",
type: 'POST',
data: "value=" + value,
success: function(data){
//some process
}
});//ajax2
$.ajax({
url: "page3.php",
dataType: "html",
type: 'POST',
data: "value=" + value,
success: function(data){
//some process
}
});//ajax3
// finish all the 3 ajax process, do the below code
$(".page").css('display','block');
Run Code Online (Sandbox Code Playgroud) 在使用Google Page Speed测试网站时,我发现我无法摆脱Defer parsing of JavaScript.我删除了所有的javascript代码,只剩下一个小代码
<script defer type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('.test').click(function(){
$(this).slideDown();
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
或者甚至没有任何jquery代码,只需将jQuery文件单独加载为
<script defer type="text/javascript" src="jquery.min.js"></script>
Run Code Online (Sandbox Code Playgroud)
仍然得到警告Defer parsing of JavaScript.
当我的页面加载时,我会进行一次AJAX调用,然后根据页面上的内容进行另一次调用.我想在两者结束时调用一个函数; 我该怎么做?
var dfd = $.when( $.ajax(...) );
if( $("type").val() == "something" ) {
dfd.when( $.ajax(...) );
}
dfd.then(function() {
// final code
});
Run Code Online (Sandbox Code Playgroud)
我找不到更多关于添加$.when "conditionally"或"稍后"的内容,因为这些搜索词太接近于承诺本身的原始目的,所以我只是得到了标准用法$.when(a, b).then(c)
谢谢
我猜答案是肯定的,但代码并不是最简单的解密.它在文档中说
使用deferred.then(),deferred.always(),deferred.done()或deferred.fail()添加到对象的任何回调都将排队等待稍后执行.调用deferred.resolve()或deferred.resolveWith()会将Deferred转换为已解析状态,并立即执行所有已设置的doneCallback.
但这并未明确涵盖将回调附加到已解决的Deferred的情况.
我正在使用来自DefinitelyTyped repo的jquery.d.ts(使用tsd).它似乎是"官方"jquery键入,因为许可证标题表示它是由Microsoft创建的.
现在,我偶尔需要创建一个延迟对象,不需要将任何参数传递给它.resolve()或.reject()方法,我无法弄清楚如何使用静态类型.
我目前正在使用一种解决方法:我正在创建延迟通过JQueryDeferred<boolean> dfd = $.Deferred()并解决它,dfd.resolve(false)虽然我不需要传递一个布尔值.从jquery.d.ts文件中我只能找到一个JQueryDeferred<T>声明,但不能找到一个声明的声明(就像这样,JQueryDeferred<void>但这不是有效的TypeScript语法).
它是如何"正确的方式"(TM)完成的?
关于承诺的另一个问题.我有这种情况:
Service.prototype.parse = function (data) {
var deferred = $.Deferred();
var arr = [];
for (var i = 0; i < data.length; i++) {
var details = new Details();
$.when(details).then(function (data) {
arr.push(data);
deferred.resolve(arr);
});
}
return deferred.promise;
};
Run Code Online (Sandbox Code Playgroud)
代码中的其他地方:
...
$.when(parse()).then(function (resp) {
//...
});
Run Code Online (Sandbox Code Playgroud)
承诺在某些时候得到解决,但最初resp的长度为1.
如何等待parse()解决所有问题并返回数组?
jquery-deferred ×10
jquery ×9
javascript ×6
ajax ×3
promise ×3
.when ×1
angularjs ×1
asynchronous ×1
data-binding ×1
pagespeed ×1
performance ×1
typescript ×1