检查Ajax是否返回true,另一个要运行的函数

时间:2015-08-12 15:39:55

标签: ajax

我有一个Ajax调用函数。如果它返回true,则应运行另一个具有另一个Ajax的函数。但在我的情况下,第一个函数返回true但第二个函数不运行。怎么做? 如果我从第二个函数中移除此if(checkIfCompleted()) {,它就可以正常工作。但我必须检查第一个函数是否返回true。 我的代码是:



function checkIfCompleted() {
	$.ajax(
	{
		url: Base_URL + "/offers/" + 'checkIfQuoteIsComplete',
		type: "POST",
		data: {
			"offer_id": offer_id                
		},

		success: function (data) {
			if(data === 'notcompleted') {
				$("#NotCompleteQuotes").modal();	
				return false;
			} else {
				return true;
			}
		},
		error: function (data) {

			MessageBoxError('Error');
		}
	});      
}




第一个函数返回true后应运行的第二个函数是:



function saveOrEditQuote(status, id) {
  if(checkIfCompleted()) {  
    
    //my code here - it's long
    	return false;
	}
}
  




2 个答案:

答案 0 :(得分:1)

Javascript是异步的,尝试使用像这样的回调

function checkIfCompleted(callback) {
    $.ajax(
    {
        url: Base_URL + "/offers/" + 'checkIfQuoteIsComplete',
        type: "POST",
        data: {
            "offer_id": offer_id                
        },

        success: function (data) {
            if(data === 'notcompleted') {
                $("#NotCompleteQuotes").modal();    
            } else {
                callback();
            }
        },
        error: function (data) {

            MessageBoxError('Error');
        }
    });      
}

然后

function saveOrEditQuote(status, id) {
  checkIfCompleted(function(){
    // will be done only on success
    //my code here - it's long
        return false;
  })
}

说明:

回调只是另一个参数,不同之处在于它是一个函数,而不是一个整数。通过使用它们,您可以确保仅在某些内容之后调用某些代码块。它们对需要一些时间的操作(如请求,jquery动画,超时)非常有帮助。

答案 1 :(得分:0)

您所要做的就是将第二个回调函数Boost_LIBRARIES传递到成功回调的主体中。您需要小心在正确的范围内声明该函数,因为成功回调的范围与saveOrEditQuote()不同。

此外,成功参数checkIfCompleted通常是一个对象和字符串数组,因此data可能会将数组与字符串进行比较。

data === 'notcompleted'