我正在尝试解决将getJSON()
函数返回的值分配给变量的问题, getJSON()
完成后的。
我认为以下解决了时间问题,但我遇到了另一个问题,即从done()
函数返回的值并将其分配给变量。
var fn1 = $.getJSON("/path", function(){
});
var h = fn1.done(function (results) {
console.log(results.a_key); // this logs the desired value
console.log(jQuery.type(results.a_key)); // this logs 'string'
return results.a_key;
});
alert(h); // alerts [object Object]
如何访问分配给变量的done()
函数的返回值?
这不是一个计时问题,而是关于如何访问返回值。
如果以上是错误的方法,有人可以证明他们如何解决问题并将结果分配给函数之外的变量?
答案 0 :(得分:0)
done
返回jQuery Deferred object - 它不是返回值。
由于 deferred.done()返回延迟对象,延迟对象的其他方法可以链接到此方法,包括其他.done()方法。
(显示的值为“[object Object]”,因为这是延迟对象的[[ToString]]。)
一旦你开始使用promises(或其他异步回调),你就会卡住这个方法 - 但是没关系,继续!
// A done() call always returns the same deferred object (fn1 in this case)
// so don't `return` from it.
fn1.done(function (results) {
console.log(results.a_key); // this logs the desired value
console.log(jQuery.type(results.a_key)); // this logs 'string'
// Do stuff with results here INSIDE the callback
// (Could also attach an additional `done` or use `then` as appropriate)
alert(results.a_key)
});
// Code down here is [likely] run before the done callback runs
// as the callback is "asynchronous".
(与then
和更复杂的异步执行流一起使用时,Promises / A和jQuery Deferred对象真的很有趣。)
答案 1 :(得分:0)
<强>解决方案强>
这对我来说是一个解决方案。
而不是这个范例:
function_1
以异步方式返回结果a
= function_1
a
此处使用function_2
我切换到:
a
= function_1
function_1
完成时b
= function_1
b
此处使用function_2
因此function_1.done()
函数成为function_2
的容器。
示例:强>
// here is the function that you are waiting on results from
var myGetJsonFunction = $.getJSON("/path", function(){
});
// the following is activated once the above function has run
myGetJsonFunction.done(function (results) {
var variableFromResults = results.a_key;
// use variableFromResults in a function here
});
// call the 'container' function here
$(document).on("click",".form_submit", function (e) {
e.preventDefault();
myGetJsonFunction();
});