Как я могу возвратить полученное AJAX значение к родительской функции текущей функции в JavaScript?

Вы могли P/Invoke CreateFile и передавать эти FILE_FLAG_DELETE_ON_CLOSE флаг. Это говорит Windows удалять файл, как только все дескрипторы закрываются. См. также: Win32 CreateFile документы .

7
задан Shog9 22 September 2009 в 19:04
поделиться

4 ответа

Generally, the best way to handle this type of issue is to use some form of callback function. Actually, it is really the only practicable solution -- the only other option is coding your own extensions to the browser, and that is a little much (unless you really like banging your head against a wall). There are actually quite a few parallel questions on these boards: you might try searching for some, many are very good.

Modifying your code:

function checkEmail(email) {
    /*
        original parts of the function here!
    */

    if (email.length) {
        $.getJSON('ajax/validate', {email: email}, function(data){
            if (data == false) {
                // stuff
            }
            checkEmailResponse( data );
        })
    }
}

function checkEmailResponse( data )
{
    // do something with the data.
}
9
ответ дан 6 December 2019 в 21:17
поделиться

Вам также следует использовать обратный вызов, потому что вызов является асинхронным и, следовательно, спроектируйте весь исходный код JavaScript вокруг этой идеи (как указывали другие).

Если вам действительно действительно нужно получить в качестве возвращаемого значения вам необходимо отключить асинхронный вызов, но это не рекомендуется вообще, поскольку он блокирует страницу до тех пор, пока не появится ответ.

function checkEmail(email, callback) {
    if (email.length) 
    return $.ajax({
      data:  {email: email},
      url: 'ajax/validate',
      async: false
     }).responseText; // only the raw response text of the XMLHttpRequest
    }
}
3
ответ дан 6 December 2019 в 21:17
поделиться

У вас может быть родительский функциональный блок, пока там что-то не будет. А чтобы снизить нагрузку на процессор, вы можете использовать какой-то тайм-аут.

function checkEmail(email) {
if (email.length) {
    var ret = null;
    $.getJSON('ajax/validate', {email: email}, function(data){
        if (data == false) {
            // stuff
        }
        ret = data;
    }) 
   while(ret == null){

   }
   return ret;
}

}

Надеюсь, это поможет.

0
ответ дан 6 December 2019 в 21:17
поделиться

Вам просто нужно изменить подход к проблеме. Вы знаете, что то, что у вас есть выше, не будет работать, поэтому вы не можете думать в терминах «вызвать функцию и работать с ее возвращаемым значением».

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

0
ответ дан 6 December 2019 в 21:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: