我如何在JQuery中返回一些东西?

时间:2011-01-11 00:44:26

标签: javascript jquery html

function vote_helper(content_id, thevote){
            var result = "";
            $.ajax({ 
                type:"POST",
                url:"/vote",
                data:{'thevote':thevote, 'content_id':content_id},
                beforeSend:function() {
                },
                success:function(html){
                       result = html;
                }
            });
            return result;
        };

我想要返回结果。但它正在返回空白字符串。

4 个答案:

答案 0 :(得分:2)

简短回答,你不能。

长答案,.ajax使用回调来返回值。这意味着在return触发时可能已经或可能没有返回该值。但无论哪种方式,它都是在另一种情况下完成的。

如果您希望让此模拟返回一个值,请在函数中添加一个新参数来替换ajax回调。例如:

 function vote_helper(content_id, thevote, callback){
    var result = "";
    $.ajax({ 
        type:"POST",
        url:"/vote",
        data:{'thevote':thevote, 'content_id':content_id},
        beforeSend:function() {
        },
        success:callback
    });
    return result;
};

vote_helper(x,y,function(html){
  result = html;
});

但无论是否解决,回复永远不会与调用函数的代码在同一工作路径中。您需要等待响应并从那里获取处理。

答案 1 :(得分:1)

由于您正在进行AJAX调用,因此您需要在success回调中处理AJAX调用的结果:

function vote_helper(content_id, thevote){
            $.ajax({ 
                type:"POST",
                url:"/vote",
                data:{'thevote':thevote, 'content_id':content_id},
                beforeSend:function() {
                },
                success:function(html){
                /* Do something like call a function with html */
                }
            });
        };

答案 2 :(得分:1)

ajax在您的功能结束时不会完成,因此您无法返回结果。相反,您必须修改函数以接受回调,并使用结果调用该回调:

function vote_helper(content_id, thevote, callback) { // extra callback argument
    $.ajax({ 
        type: "POST",
        url: "/vote",
        data: {'thevote':thevote, 'content_id':content_id},
        beforeSend: function() {},
        // Point directly to the callback here
        success: callback
    });
};

答案 3 :(得分:0)

如果您希望在等待服务器响应时UI完全没有响应,您可以执行以下操作:

function vote_helper(content_id, thevote){
        var result = "";
        $.ajax({ 
            type:"POST",
            async: false, //This line will make your code work
            url:"/vote",
            data:{'thevote':thevote, 'content_id':content_id},
            beforeSend:function() {
            },
            success:function(html){
                   result = html;
            }
        });
        return result;
};

但是没有人希望UI挂起,所以真正的答案是其他建议,而不是返回一个值,你的方法应该采取一个回调,当你的异步方法返回时,它将传递'返回值'。