仍有问题通过功能回归价值

时间:2011-11-19 20:05:11

标签: javascript jquery ajax function

我遇到以下功能的严重问题:

    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.
            }
        });
    }

除了未定义的值之外,没有任何内容的接缝,并且调试器中没有显示错误。 我真的差点把我的笔记本电脑扔在墙上。 如果有人可以帮我这样做,请回答! 提前谢谢。

4 个答案:

答案 0 :(得分:2)

第一关: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;
}

答案 1 :(得分:1)

问题在于您尝试从中返回关键字的范围。成功函数由jQuery调用,并且您无法控制jQuery对该返回值执行的操作。你可以做return $.ajax(...但是你不会得到你期望的,因为根据文档:“从jQuery 1.5开始,$ .ajax()方法返回jqXHR对象,它是XMLHTTPRequest对象的超集“(http://api.jquery.com/Types/#jqXHR)。

你应该做的是设置一个回调函数,如:

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

并在成功函数中调用该函数:

doSomethingWithKeywords(keywords);

编辑: Hogan是一个很好的解决方案,因为你的电话不是异步的。

答案 2 :(得分:1)

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

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

简言之,您需要在success回调中实现该功能。这可以在线完成,或者您可以在Ajax调用本身之外创建回调函数,并将其用作success属性的值:

function onSuccess(data) {
    // Do something with the data here
}

...

$.ajax({ // etc.
    success: onSuccess
};

您也可以使用jQuery's $.when function

答案 3 :(得分:0)

你遇到的问题是你传递的回报不是函数的回归 - 它是成功事件的回归。通常,闭包(暗示将局部变量传递给函数)用于解决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;
}