【发布时间】:2017-04-02 09:11:49
【问题描述】:
稍作修改,我尝试使用 Bergi 在jQuery Recursive AJAX Call Promise 中提供的代码。就我而言,我进行 AJAX 调用以测试用户名是否已被使用。如果它已在使用中,则编写一个新用户名并测试该用户名。一旦我们有一个未使用的用户名,我们就完成并返回那个未使用的用户名。但是,我没有得到预期的返回值。我得到的返回值是未定义的。控制台日志语句:
console.log("Return => " + username);
就在 requestUsername 函数返回显示我返回了一个好的值之前,但它没有达到:
requestUnused().done(function(unused_uname)
声明。这是我的代码:
$(document).ready(function() {
function request(query_val) {
// return the AJAX promise
return $.ajax({
url: "/php/is_dup_ad_json.php",
method: 'GET',
dataType: 'json',
data: {
query: query_val, sid: Math.random()
},
});
}
function requestUsername(username) {
console.log("Initial => " + username);
return request(username).then(function(ajax_json){
$.each(ajax_json, function(key, value) {
$.each(value, function(k, v) {
if ((k == "duplicate") && (v > 0)) {
// try again with a different username
var first_initial = fname.substr(0,1);
var surname = lname.substr(0,6);
var idx = v + 1;
var tmpUname = surname + first_initial + idx;
console.log("Temp => " + tmpUname);
return requestUsername(tmpUname);
}
else {
console.log("Return => " + username);
return username;
}
});
});
});
}
function requestUnused(){
var fname = "bugs";
var lname = "bunny";
var first_initial = fname.substr(0,1);
var surname = lname.substr(0,7);
var init_uname = surname + first_initial;
return requestUsername(init_uname);
}
$("#test").on('click', function() {
requestUnused().done(function(unused_uname) {
console.log("Done => " + unused_uname);
});
});
});
【问题讨论】:
-
“如果它已经在使用,则编写一个新的用户名并测试那个。一旦我们有一个未使用的用户名,我们就完成并返回那个未使用的用户名。” - 这不是一个好策略。让服务器找出一个未使用的用户名并通过初始 Ajax 调用返回该用户名。不要为这个用例创建一个无休止地来回发送 Ajax 的系统,这很愚蠢。
-
呃,插入
$.each不仅仅是“轻微修改”。特别是因为您的then回调不再有return任何东西。 -
你能发一个
ajax_json的例子吗?目前还不清楚这些循环有什么用处。 -
ajax_json 示例:[{"duplicate":1}]
标签: javascript jquery ajax recursion