通过函数返回值仍然有问题

Still Having Problems Returning Value Through Function

本文关键字:有问题 返回值 函数      更新时间:2023-09-26

下面的函数有严重的问题:

    function requestUploadedSearch()
    {
        var cookie = JSON.parse(readCookie("user_search_cookie"));
        $.ajax({
            dataType: "script",
            async: false,
            data: {
                context: "search-get",
                code: removeNull(cookie, cookie !== null, "code")
            },
            success: function(data)
            {
                var keywords = search_return["keywords"];
                return keywords; // here is the damn problem.
            }
        });
    }

除了未定义的值之外,函数中没有任何输出,并且调试器中没有显示错误。我真的差点把我的笔记本电脑扔到墙上。如果有人能帮我做这个,请回答!

第一关:search_return变量在哪里?你为什么忽略data ?

我有一种感觉,这就是你想要做的:

function requestUploadedSearch()
{
    var cookie = JSON.parse(readCookie("user_search_cookie"));
    var keywords;
    $.ajax({
        dataType: "json",
        async: false,
        data: {
            context: "search-get",
            code: removeNull(cookie, cookie !== null, "code")
        },
        success: function(data)
        {
            keywords = data["keywords"];
        }
    });
    return keywords;
}

问题在于,由于Ajax调用将在将来的任意时间完成,因此您不能简单地从其success处理程序返回一个值。

一个问题是,您实际上没有对服务器返回的data做任何事情,这似乎令人费解。

简单的版本是,你需要实现的功能作为success回调的一部分。这可以内联完成,或者您可以在Ajax调用本身之外创建回调函数,并将其用作success属性的值:

function onSuccess(data) {
    // Do something with the data here
}
...
$.ajax({ // etc.
    success: onSuccess
};

你也可以使用jQuery的$。当函数。

问题在于您试图从中返回关键字的范围。成功函数由jQuery调用,您无法控制jQuery如何处理返回值。你可以做return $.ajax(...,但你不会得到你所期望的,因为根据文档:"作为jQuery 1.5, $.ajax()方法返回jqXHR对象,这是XMLHTTPRequest对象的超集"(http://api.jquery.com/Types/#jqXHR)。

你应该做的是建立一个回调函数:

function doSomethingWithKeywords(keywords) {
    // do stuff
};

并在success函数中调用该函数:

doSomethingWithKeywords(keywords);

EDIT: Hogan's是一个很好的解决方案,因为您的调用不是异步的。

您遇到的问题是,您传递的返回不是函数的返回,而是成功事件的返回。在JavaScript中,通常使用闭包(隐含地将局部变量传递给函数)来解决这个问题。

NB我仍然不认为你的函数会起作用,因为我看不到search_return["keywords"]的定义。但至少您不必担心关闭问题。一旦成功函数是正确的,主函数将返回它。

:

function requestUploadedSearch()
{
    var cookie = JSON.parse(readCookie("user_search_cookie"));
    var returnClosure;
    $.ajax({
        dataType: "script",
        async: false,
        data: {
            context: "search-get",
            code: removeNull(cookie, cookie !== null, "code")
        },
        success: function(data)
        {
            // returnClosure = data["keywords"];
            returnClosure = search_return["keywords"];
        }
    });
    return returnClosure;
}