jQuery $ .post从函数部分2内部返回数据[重复]

问题描述 投票:0回答:3

此问题已经在这里有了答案:

我以前的帖子已关闭,因为当它不是也没有回答问题时,它被标记为重复。建议再次询问。问题是当它在另一个函数中时,如何从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
3个回答
1
投票

“问题是我如何从jQuery返回对象值$ .post()在另一个函数中时的函数调用“


0
投票

实际上,我认为您缺少了一些东西,想要达到的结果无法像您描述的那样完成,这是一个同步问题。一个函数不能等待$ .post的响应然后返回它,这不是javascript的工作方式,您需要改用回调函数。


-1
投票

您想要什么需要最新的JavaScript功能。请尝试了解“异步”方式。外部函数需要等待内部函数的结果。如果没有同步,则逐行运行,但是远程调用需要时间等待,而无法做到这一点。

© www.soinside.com 2019 - 2024. All rights reserved.