2012-05-21 4 views
0

Когда я вызываю эту функцию, я не получаю возвращаемое значение для использования в моей другой функции, которая его вызывала. Я знаю, что этот запрос работает, поскольку я могу использовать alert() и видеть, что значение есть. Любые идеи очень приветствуются.Возвращаемое значение из функции jquery пусто

function GetRepName(InputStr1){ 
    var name = ''; 
    $.post("getrepname.php", {queryString: ""+InputStr1+""}, function(data){ 
    if(data.length >0) { 
     $('#Results'+InputStr1).html(data); 
     name = data; 
    } 
    }); 
    return name; 
} 

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

+3

Это связано с характером асинхронных запросов. У вас есть поиск, этот вопрос задавался буквально сотни раз. –

+0

... или посмотрите на соответствующие вопросы в правой колонке. – Guffa

ответ

2

Дело в том, что обратный вызов $ .post вызывается асинхронно, то есть после возвращения функции. Вы можете сделать вызов AJAX синхронно, но это не рекомендуется. Вам лучше перепроектировать ваш код с учетом асинхронного характера запросов.

1

Это может решить вашу проблему, потому что таким образом скрипт будет остановится, пока не получите результат:

$.ajaxSetup({async:false}); 

Обратите внимание, что Ajax не предназначена для этого, он должен быть асинхронным, так как его имя показывает его Асинхронный JavaScript и XML


я покажу вам, как я хотел бы сделать это:

function fnA(){ 
    GetRepName(); 
} 

function GetRepName(InputStr1){ 
    var name = ''; 
    $.post("getrepname.php", {queryString: ""+InputStr1+""}, function(data){ 
    if(data.length >0) { 
     $('#Results'+InputStr1).html(data); 
     name = data; 
    } 
    //fnB will be called if the ajaxing finished 
    fnB(name); 
    }); 
} 

function fnB(name) 
{ 
    //do something with name 
} 
0

Если замечательные ответы здесь, кажется вам техничным или запутанным. Я разделил код на сегменты (части). Посмотрите на комментарии.

function GetRepName(InputStr1){ 
    var name = ''; // Part1 (runs immediately when you call function) 
    $.post("getrepname.php", {queryString: ""+InputStr1+""}, // Part2 (runs immediately after Part1, an ajax request is called by client to server 
function(data){ 
    //Part3 (Javascript does an ajax call to server, server executes its code and then send the result back to client, only then the below part of code executes....(i.e. when server sends its response)) 
    if(data.length >0) {  
     $('#Results'+InputStr1).html(data); 
     name = data; 
    } 

    } /* end of part 3 */); 
    return name; // Part4 (runs immediately after part2 
} 

С Part4 запускается до PART3, name='' отправляется при вызове GetRepName("your_string");

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