当用户单击某些按钮并提交某些表单时,我需要向其请求其他凭据。 我要这样做的方式是: 拦截提交事件,中止它并存储副本 通过提示对话框要求提供凭据(不是JS本机对话框,因此这都是非阻塞的) 如果用户输入了凭据,则将字段插入事件数据并将其发送到服务器。 我当前的 ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我在循环和对象数组发送另一个AJAX调用时遇到问题。 代码如下
var def = true;
$.each(urls, function(index, val) {
var postResult = $.Deferred();
link = 'http://myurl.com' + val.aslug + '/' + val.slug;
$.when(def).then(function(){
$.post('https://graph.facebook.com ', {id : link, scrape : 'true' }, function(data, textStatus, xhr) {
}).always(function(){
postResult.resolve(5);
});
});
def = postResult;
});
问题是第一次和第二次通话都没问题。 但是第三次调用和第二次调用相同:/我认为每个都不会更改为下一个对象
在这种情况下,最简单的方法是:将变量链接分配移到“ when-then”构造中。
var def = true;
$.each(urls, function(index, val) {
var postResult = $.Deferred();
$.when(def).then(function(){
var link = 'http://myurl.com' + val.aslug + '/' + val.slug;
$.post('https://graph.facebook.com ', {id : link, scrape : 'true' }, function(data, textStatus, xhr) {
}).always(function(){
postResult.resolve(5);
});
});
def = postResult;
});
由于JS异步功能,您遇到了这个问题。 $ .each()-当您的“延迟的代码段”将运行时,循环根本不会等待。 它遍历数组并创建将要执行的任务队列。
您也可以考虑将$.AJAX
与选项async:False
一起使用
您的直觉是正确的-最大的问题是您不想在循环中创建函数。 到$.when
第二次解析时,该闭包内的link
变量将不再引用正确的值。 这就是为什么您会收到大量调用相同网址的原因。
另外,要创建承诺序列,您将要使用类似以下的内容: https : //github.com/kriskowal/q#sequences (不确定jQuery承诺是否具有可比较的功能)
示例代码:
// not sure if this is necessary
// haven't used jQuery promises much
var result = $.when(true);
mapUrlsToPosts(urls).forEach(function(f) {
result = result.then(f);
});
function mapUrlsToPosts(urls) {
return urls.map(function(url) {
// create a function that when executed will make a request to the desired url
return post.bind(null, url);
});
}
function post(val) {
var link = 'http://myurl.com' + val.aslug + '/' + val.slug,
postResult = $.Deferred(),
params = {
link: link,
scrape: 'true'
};
$.post('https://graph.facebook.com ', params, function(data, textStatus, xhr) {
}).always(function(){
postResult.resolve(5);
});
return postResult;
}
编辑:顺便说一句,如果您不需要等待下一个请求之前的完成就可以简化所有操作。 这里的大多数复杂性来自对请求进行排队。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.