Javascript 这个js代码有什么问题,从函数返回变量

Javascript 这个js代码有什么问题,从函数返回变量,javascript,php,jquery,Javascript,Php,Jquery,我正在从事一个项目,在这个项目中,我发布了thumbsup,并喜欢通过AJAX/post在PHP脚本上单击。这将在处理后返回,具体取决于用户是否登录到带有json_encode的错误数组。0表示一切正常,1表示用户未登录。我编写的submit函数在每个循环上重新定义错误变量后不会返回它。当我在每个循环上执行console.logerror时,它确实返回1,但当我在click函数上检查它时,它返回false。我有以下两个功能: 我似乎无法理解我做错了什么 function submit(tip,v

我正在从事一个项目,在这个项目中,我发布了thumbsup,并喜欢通过AJAX/post在PHP脚本上单击。这将在处理后返回,具体取决于用户是否登录到带有json_encode的错误数组。0表示一切正常,1表示用户未登录。我编写的submit函数在每个循环上重新定义错误变量后不会返回它。当我在每个循环上执行console.logerror时,它确实返回1,但当我在click函数上检查它时,它返回false。我有以下两个功能:

我似乎无法理解我做错了什么

function submit(tip,varid){
    var error = false;
    $.post( "/rwfr.php", { name: ""+tip+"", id: ""+varid+"" })
     .done(function( data ) { 
        var results = jQuery.parseJSON(data);
        $(results).each(function(key, value) {
            error = value['error'];
            return false;
        })
    });
  return error;
}

$(".fa-thumbs-up").click(function(){
    var idObj = $(this).parent().parent().attr("data-id");
    var act = submit('thumbsup',idObj);
    if(act == "1"){
        console.log(act);
        alert("You must log in before you can rate this video!");
    }
});
虽然被否决了,但我保留了这个答案,因为有类似问题的人可能会觉得这个答案简单而有用

在您的例子中返回false的原因是,当您从submit获得响应时,您的下一行即ifact==1正在运行,这当然会返回false,因为您已经用vallue false初始化了error

您可以在函数中更改的是,您可以只移动用于检查回调函数中收到的响应错误的代码段,该回调函数必须在post请求的.done内调用

见下文

// your submit function
function submit(tip, varid, callback){
    var response = $.post("post.php", { name: ""+tip+"", id: ""+varid+""});
    response.done(function(data){
        callback(JSON.parse(data), tip);
    });
}

// your callback function
function callbackFunction(response, action_type){
    // handle your prompts here based on your action_type i.e. thumbs up, down, favourite, etc.
    console.log(response);
    if(response.hasOwnProperty("error") && response["error"]=="1"){
        console.log("you need to login to do this!");
    }
}

// and pass the callback function to your submit function
var act = submit('thumbsup',idObj, callbackFunction);

据我所知,return false确实打破了each循环。我试过了,没有返回false,同样的结果。在jQuery的内部返回false。每个都会停止迭代。在native.forEach或lodash或下划线中不会出现这种情况。在我看来,这对他们来说是一个可怕的设计决定。谢谢,这在并没有每个循环的情况下都能工作。但我的代码到底出了什么问题?有没有办法让它像我当初想的那样工作。我无法使用submit函数中的错误输出,因为我将使用此函数执行更多操作:竖起大拇指、竖起大拇指、稍后观看、添加到收藏夹、报告,以便每个单击操作都应有自己的消息。好的。您可以检查答案的编辑部分,立即删除返回false;在每个循环中。另请参见。您知道submit函数在.done函数被调用之前很久就返回了,对吗?