2016-02-07 3 views
0
function duplicateCenter(center, email) { 
    $.ajax({ 
     type: "POST", 
     url: "../staff/staffDA.php", 
     data: "funId=-4&center=" + center + "&email=" + email, 
     success: function (data) { 
      if (data.split('|')[0] === 'true') { 
       alert('Duplicate Entry Found !!\r\n' + data.split('|')[1]); 
       return false; 
      } 
      return true; 
     } 
    }); 
    return true; 
} 

function addCenterInfo() { 
    /* some coding and initializations */ 

    if (!duplicateCenter(center, email)) { 
     return; 
    } 

    alert('hi'); 
    alert('hi'); 

    /* more codes */ 
} 

Кто-нибудь, пожалуйста, помогите мне понять, почему функция выше выполняется в обратном порядке?javascript выполняется в обратном порядке

Текущий порядок выполнения

`hi` 
`hi` 
`Duplicate Entry Found !!` 

, где, как ожидается, исполнение должно быть Duplicate Entry Found !! только и он должен выйти из функции.

ответ

2

duplicateCenter содержит AJAX код, который Асинхронный

Любой, пожалуйста, помогите мне понять, почему выше функция становится выполняется в обратном порядке? код работает в правильном Asynchronous порядке

Для получения дополнительной информации о AJAX передать этот ответ:
How do I return the response from an asynchronous call?

Возможное решение: Используйте функцию обратного вызова

function duplicateCenter(center, email, callback) { 
 
    $.ajax({ 
 
    type: "POST", 
 
    url: "../staff/staffDA.php", 
 
    data: "funId=-4&center=" + center + "&email=" + email, 
 
    success: function(data) { 
 
     var flag=false; 
 
     if (data.split('|')[0] === 'true') { 
 
     flag=true; 
 
     alert('Duplicate Entry Found !!\r\n' + data.split('|')[1]); 
 
     } 
 
     if(typeof callback==='function') callback(flag); 
 
    } 
 
    }); 
 
} 
 

 
function addCenterInfo() { 
 
    /* some coding and initializations */ 
 
    duplicateCenter(center, email, function(isDuplicate) { 
 
    if (isDuplicate) { 
 
     alert('duplicate'); 
 
    } else { 
 
     alert('not duplicate'); 
 
    } 
 
    }); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

решение пожалуйста ?? – Ravi

+0

проверить правку .... –

1

«А» в «Аяксе» означает «Асинхронный». Вы вызываете функцию duplicateCenter() перед предупреждениями, но эта функция возвращается, не дожидаясь ответа. К моменту завершения вызова staffDA.php предупреждения уже выполнены.

0

AJAX-вызовы являются асинхронными. Это означает, что вы не знаете, когда они вернутся. Вот почему вы должны указать функцию success: она вызывается только при возврате вызова AJAX, который может быть менее секунды или во многих.

Так что, если вы хотите вызвать код только после того, как метод success побежал, что вам нужно сделать ваш код выглядеть следующим образом:

function duplicateCenter(center, email) { 
    $.ajax({ 
     type: "POST", 
     url: "../staff/staffDA.php", 
     data: "funId=-4&center=" + center + "&email=" + email, 
     success: function (data) { 
      if (data.split('|')[0] === 'true') { 
       alert('Duplicate Entry Found !!\r\n' + data.split('|')[1]); 
       itWasFalse(); 
      } 
     } 
    }); 
} 

function itWasFalse() { 
    // just en empty return? so lonely (and not needed - all JS functions return) 
} 

function moreCodes() { 
    alert('hi'); 
    alert('hi'); 

    /* more codes */ 
} 

function addCenterInfo() { 
    /* some coding and initializations */ 
    duplicateCenter(center, email); 
} 
0

Это объявление функции, порядок, в котором они будут выполняется, скорее, зависит от вызова этих функций.

0

Я добавил одну дополнительную строку кода в моей существующей функции т.е.

асинхр: ложные

Теперь она работает так же, как я ожидал.

function duplicateCenter(center, email) { 
flag=true; 
    $.ajax({ 
     type: "POST", 
     url: "../staff/staffDA.php", 
     async:false, 
     data: "funId=-4&center=" + center + "&email=" + email, 
     success: function (data) { 
      if (data.split('|')[0] === 'true') { 
       alert('Duplicate Entry Found !!\r\n' + data.split('|')[1]); 
       flag=false; 
      }else{ 
       flag=true; 
      } 

     } 
    }); 
    return flag; 
} 

Ссылка: -

jQuery: Performing synchronous AJAX requests

Смежные вопросы