此问题已经在这里有了答案:
我以前的帖子已关闭,因为当它不是也没有回答问题时,它被标记为重复。建议再次询问。问题是当它在另一个函数中时,如何从jQuery $ .post()函数调用返回对象值。他们引用的帖子无法回答这个问题。 jQuery将.then()视为一个承诺,但无法弄清楚如何从包含函数中返回该值。
参考帖子:How do I return the response from an asynchronous call?
列出的所有答案都等到预期为止,直到ajax完成,并使用某种形式的回调函数,如jQuery .then(),但没有一个方法解释如何通过包含函数返回该函数,除非我错过了它。如果我想念它,我深表歉意,并感谢有人指出我想念它的地方。
OP中的Meisam Mahdian给出了一个使用var dfd = $.Deferred();
然后返回dfd的示例,但这似乎不起作用,我得到的只是$ .post()原型,就像我当前正在使用的函数一样。] >
在其他语言中,我只是通过引用传递变量,但在javascript中不存在(我可以看到)
问题是当它在另一个函数中时,如何从jQuery $ .post()返回承诺值。这样位于另一个脚本中的
var thisData = getItemData(id, div);
会将变量thisData
设置为从jQuery接收到的JSON响应,而无需求助于全局变量(即OP中的sData)。另一个示例试图获得与以下相同的效果,但使用jQuery $ .post()函数替换innerFunction()的方法>
var test = outerFunction(); function outerFunction() { function innerFunction() { return 'yay'; } return innerFunction(); }
我还尝试了return的不同变化,包括局部变量和.then()对其进行修改并返回它。那些也不起作用。
OP:
我想从函数的返回数据中设置一个变量,但是,里面有一个$ .post()调用。我如何修改以下代码以返回数据。我查看了很多建议,但似乎都没有用。
当前.then()中的sData是一个全局变量,我想将其用作返回值,因此var thisData = getItemData(id, div);
任意位置的本地调用都将与当前的全局变量sData相同。我看到使用回调函数,但这不能解决问题,因为我必须在该回调中使用全局变量。
原谅复杂的三元,可以在服务器端返回3种可能的JSON类型。
var sData; function getItemData(id, div) { typeof id !== 'undefined' ? id : '220'; typeof div !== 'undefined' ? div : ''; beginLoading(div); return $.post({ url: '/content/itemsjson/?categoryid=' + id, data: { }, }) .done(function(data, status, request) { //*** }) .fail(function(xhr, textStatus, errorThrown) { //*** }) .always(function(data) { //*** }) .then(function(data) { stopLoading(div); sData = (typeof data == 'string') ? JSON.parse(data.responseText) : (data[0] ? data[0] : data); }); }
我以前的帖子已关闭,因为当它不是也没有回答问题时,它被标记为重复。建议再次询问。问题是如何从...
“问题是我如何从jQuery返回对象值$ .post()在另一个函数中时的函数调用“
实际上,我认为您缺少了一些东西,想要达到的结果无法像您描述的那样完成,这是一个同步问题。一个函数不能等待$ .post的响应然后返回它,这不是javascript的工作方式,您需要改用回调函数。
您想要什么需要最新的JavaScript功能。请尝试了解“异步”方式。外部函数需要等待内部函数的结果。如果没有同步,则逐行运行,但是远程调用需要时间等待,而无法做到这一点。