2012-03-07 2 views
0
function lookup (inputString) 
{ 
    var responseArray = new Array(); 
    // alert(inputString); 
    $.post("/airmanage/networkadmin/partnership_management/getMainDist.jsp",user: ""+inputString+""}, 
    function(data){ 
    // alert(data); 
    responseArray = data.split(","); 
    //alert(responseArray.length); 
    }); 
    return responseArray; 
    } 

     var x = new Array(); 
     x = lookup("a"); 
     alert ( x ); 

Я новичок в jquery, так что вы можете помочь мне. В ответном массиве responseArray появляется пустое место.Использование переменной JS в jQuery

Я не могу использовать переменную responseArray, определенную в функции js, назначаемой данным в функции jquery, пожалуйста, дайте мне знать, как использовать эту переменную.

ответ

0

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

Создание подстановки асинхр со своим обратным вызовом:

function lookup(inputString, callback){ 
    $.post(
    "/airmanage/networkadmin/partnership_management/getMainDist.jsp", 
    {"user": inputSting}, 
    function(data) { 
     if(typeof callback == 'function') { 
      callback(data); 
     } 
    }); 
} 


// usage 
lookup('theInputStringValue', function(data){ 
    alert(data); 
}); 

Основная причина, чтобы сделать это таким образом было бы просто закрепить URL и параметров кодирования для всех «поисков» и сделать его проще использовать вместо неоднократно используя $.post для того же вызова в многочисленных местах. Помимо того, что вы не делаете ничего особенного здесь, вы не могли бы сделать прямо в обратном вызове, который был отправлен на $.post.

+0

Спасибо за быстрый ответ, на самом деле я могу получить данные в функции обратного вызова, которая поставляется в виде строки разделенной ' , «Я конвертируюсь в массив, чтобы передать его как вход в функцию автозаполнения jquery. – user1253741

+0

Большое спасибо ... его работа – user1253741

0

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

function lookup (inputString, callback) { 
    var responseArray = []; 

    $.post("/airmanage/networkadmin/partnership_management/getMainDist.jsp", 
     user: "" + inputString }, 
     function (data) { 
      responseArray = data.split(","); 
      callback(responseArray); 
     }); 
} 

lookup("a", function(arr) { 
    alert(arr); 
}); 

Если вы используете JQuery 1.7+, вы можете также использовать интерфейс Promise теперь доступен на AJAX запросов:

function lookup (inputString) { 
    var responseArray = []; 

    return $.post("/airmanage/networkadmin/partnership_management/getMainDist.jsp", user: "" + inputString }) 
    .pipe(function(data) { 
     return data.split(','); 
    }); 
} 

lookup("a") 
    .done(function(arr) { 
     alert(arr); 
    }); 
0

Are вы пропускаете открытые фигурные скобки до user? И угадайте, что вы должны иметь запятую, чтобы добавить плюс до inputString.

Если это не

$.post("/airmanage/networkadmin/partnership_management/getMainDist.jsp",user: ""+inputString+""}, 

будет это -

$.post("/airmanage/networkadmin/partnership_management/getMainDist.jsp",{user: "", inputString:""}, 
Смежные вопросы