2011-12-26 4 views
0

Привет У меня есть эта функция:функции Javascript Правда или Ложь

function makeTweet(params) { 
    var tweetID = params.tweetID; 
    var tweetDate = params.tweetUrl; 
    var tweetText = params.tweetText; 
    var tweetUrl = params.tweetUrl; 
    var authorName = params.tweetDate; 
    var authorNickname = params.authorNickname; 
    var authorAvatar = params.authorAvatar; 

    if (haveOauth() == true) { 
     alert("We have the account, make the reply"); 
    }else{ 
     alert("We do not have it"); 
    } 
} 

Он должен получить результаты ниже функции и понять, если она возвращает истину или ложь и сделать определенное действие, основанное на этом.

Как это сделать? Что бы я ни делал сейчас, возвращает тот же результат. Здесь что-то не так. Благодаря

function haveOauth() { 
    var user_id = "1"; 
    var data = $.ajax({ 
     type: "POST", 
     url: "uspolitics_pulse/functions.php", 
     data: { type: 'checkOauth', user_id: user_id }, 
     async: false, 
     success : function(data) { 
      if(data) { 
       return false; 
      } 
     } 
    }); 
} 

ответ

1

async: false никогда не рекомендуется, но вы можете попробовать заменить

if(data) { 
    return false; 
} 

с

var result = false; 
var data = $.ajax({ 
    // ... 
    success : function(data) { 
     result = data; 
    } 
}); 
return result; 

Но почему бы не haveOath взять свой собственный обратный вызов

function haveOauth(callback) { 
    var user_id = "1"; 
    var data = $.ajax({ 
     type: "POST", 
     url: "uspolitics_pulse/functions.php", 
     data: { type: 'checkOauth', user_id: user_id }, 
     success : function(data) { 
      callback(data); 
     } 
    }); 
} 

А потом

function makeTweet(params) { 
    var tweetID = params.tweetID; 
    var tweetDate = params.tweetUrl; 
    var tweetText = params.tweetText; 
    var tweetUrl = params.tweetUrl; 
    var authorName = params.tweetDate; 
    var authorNickname = params.authorNickname; 
    var authorAvatar = params.authorAvatar; 

    haveOauth(function(data) { 
     if (data) { 
      alert("We have the account, make the reply"); 
     }else{ 
      alert("We do not have it"); 
     } 
    }); 
} 
+0

нет это не ниже функция, которая должна г eturn false или true. Не первая, вторая функция. –

+0

См. Во второй функции, где указано: if (data) { return false; } –

+0

@DiegoP .: Возврат произойдет мгновенно, вы не сможете вернуть значение результата асинхронного запроса (что может привести к ошибке). Но вы можете вернуть объект [обещание] (http://en.wikipedia.org/wiki/Futures_and_promises). – Bergi

0

Попробуйте это:

function haveOauth() { 
    var result = true; 
    var user_id = "1"; 
    var data = $.ajax({ 
     type: "POST", 
     url: "uspolitics_pulse/functions.php", 
     data: { type: 'checkOauth', user_id: user_id }, 
     async: false, 
     success : function(data) { 
      if(data) { 
       result = false; 
      } 
     } 
    }); 

    return result; 
} 
0

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

function haveOauth() { 
var user_id = "1"; 
var data = $.ajax({ 
    type: "POST", 
    url: "uspolitics_pulse/functions.php", 
    data: { type: 'checkOauth', user_id: user_id }, 
    async: false, 
    success : function(data) { 
     if(data) { 
      return false; 
     } 
    } 
}); 
return true; 
} 
0

Функция haveOauth включает в себя вызов AJAX, который не рекомендуется, чтобы быть синхронными, так как @AdamRackis указал. (Кроме того, ваш return внутри функции обратного вызова, переданного $.ajax не делать то, что вы хотите, и вы не нашли return true где - см. Решение по @MichaelSwan)

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

function haveOauth(callback) { 
    var user_id = "1"; 
    $.ajax({ 
     type: "POST", 
     url: "uspolitics_pulse/functions.php", 
     data: { type: 'checkOauth', user_id: user_id }, 
     success : function(data) { 
      if (data) { // or whatever check needs to be made 
       callback(true); // signal that authenticated 
      } else 
       callback(false); // signal that not authenticated 
     } 
    }); 
} 

И затем использовать эту функцию, как это в makeTweet:

haveOauth(function(isAuthenticated) { 
    if (isAuthenticated) 
     alert("We have the account, make the reply"); 
    else 
     alert("We do not have it"); 
}); 
Смежные вопросы