我有一些代码如下:

$(document).on('click', '.set_up_btn', function(){
var menu_name=$('.menu_name').val();
var menu_type=$('.menu_type_sel').val();
var rest_id=$('body').data('rest_id');
var error=false;

if(menu_name=="")
{
    $('.error_box13').eq(0).html("<p>Enter Identifier for this Menu</p>");
    $('.error_box13').eq(0).show(300);
    error=true;
}
if(menu_type=="0")
{
    $('.error_box13').eq(1).html("<p>Select Menu Type</p>");
    $('.error_box13').eq(1).show(300);
    error=true;
}
if(error==true)
{
    return;
}
//check menu name is unique
var data="rest_id="+rest_id+"&name="+menu_name;

$.ajax({
    type:"POST",
    url:"includes/check_menu_name.php",
    data:data,
    success:function(html){
        if(html==1)
        {
            //menu name is duplicate
            $('.error_box13').eq(0).html("<p>Menu Name already in use.</p>");
            $('.error_box13').eq(0).show(300);
            error=true;
        }
        else if(html==2)
        {
            //menu name is ok

        }
    return error;
    }
});//end ajax
if(error==true)
{
    e.stopImmediatePropagation();
    return false;
}

var data2="rest_id="+rest_id+"&name="+menu_name+"&menu_type="+menu_type;

$.ajax({
    type:"POST",
    url:"includes/set_menu.php",
    data:data2,
    success:function(html2){
        if(html2==1)
        {
            var app="";
            if(menu_type==1)
            {
                menu_type="Bar Menu";
            }
            if(menu_type==2)
            {
                menu_type="Food Menu";
            }
            app+="<h2 class='menu_header'>"+menu_type+"</h2><hr />";
            app+="<h2 class='menu_title'>"+menu_name+"</h2>";
            $(app).appendTo($('.third').eq(2));
        }
        else
        {
            alert("ERROR: Could not write to database. Please try again.");
        }
    }
});//end ajax

});


我需要做的是,如果第一个ajax请求返回“ 1”,则退出整个“单击”功能-该用户已经在使用菜单名称。

目前,如果发生这种情况,则javascript会继续运行到第二个ajax请求中,并将数据写入数据库。

最佳答案

您遇到了这个问题,因为成功函数是在请求返回时在“稍后”调用的。它不是瞬时的,因此尚未填充错误变量。按以下方式处理成功函数中的错误:

$.ajax({
    type:"POST",
    url:"includes/check_menu_name.php",
    data:data,
    success:function(html){
        if(html==1)
        {
            //menu name is duplicate
            $('.error_box13').eq(0).html("<p>Menu Name already in use.</p>");
            $('.error_box13').eq(0).show(300);
            error=true;


            // we must handle the error here!


            handleError(e, error);
        }
        else if(html==2)
        {
            //menu name is ok



            // continue on as normal
            continueNoError();
        }
    return error;
    }
});//end ajax

// Code run here runs BEFORE $.ajax returns


function handleError(e, error) {
    if(error==true)
    {
        e.stopImmediatePropagation();
        return false;
    }
}

function continueNoError() {
    // Put what to after the first ajax call here
}

10-05 20:59
查看更多