Jquery AutoComplete – 没有从functon获取返回值

我确信我的编码有一百万个问题……

但是一切都有效 – 除了autoComplete。

我似乎无法从searchResults函数返回值。

我想要返回字符串。

马上

alert("t: " + availableTags); 

工作但是

  alert("x: " + availableTags); 

才不是

返回行都没有返回值。

我究竟做错了什么?

 $(function(){ //$("#searchButton").click(function(){ //$("input").keyup(function(e){ var availableCompanies = searchResults('CompanyName',false); var availableLocations = searchResults('Location',false); $("input[id^='CompanyName']").keyup(function(){ //alert("CN"); searchResults('CompanyName',true); });//$("input[id=CompanyName]").keyup(function(e){ $("input[id^='Location']").keyup(function(){ searchResults('Location',true); }); $("input[id^='serving']").keyup(function(){ searchResults('serving',true); }); $( "#CompanyName" ).autocomplete({ source: availableCompanies }); $( "#Location" ).autocomplete({ source: availableLocations }); alert(availableCompanies); })//$(function(){}) function searchResults(which,populate,availableTags){ //clear search results $("#searchResults").text(""); //clear available tags //jqxAlert.alert(which); //var sSearch = $("#search").val(); var sSearch = $("input[id='"+which+"']").val(); var url = "search.asp?" + which + "=" + sSearch; //alert(url); var availableTags = ""; $.get(url, function(data){ //$('#searchResults').html(data); var uid ="" var company = ""; var location = ""; var phone1 = ""; var phone2 = ""; var phone3 = ""; var html = ""; var sql = ""; var i = 1; if ($('company',data).text() == ""){ $("#searchResults").html("Sorry, there are no results."); }; $.each($('company',data),function(index, el) { uid = $(this).find('uid').text(); companyName = $(this).find('CompanyName').text(); location = $(this).find('location').text(); //phone1 = $(this).find('phone1').text(); //phone2 = $(this).find('phone2').text(); //phone3 = $(this).find('phone3').text(); //serving = $(this).find('serving').text(); //sql = "
" + $(this).find('sql').text() + "
"; //alert(which == "CompanyName"); if (which == "CompanyName"){ //availableTags = availableTags + companyName; if (availableTags.indexOf(companyName) < 0){ if (availableTags == "") { availableTags = companyName; }else{ availableTags = availableTags + "," + companyName; } } } if (which == "Location"){ if (availableTags.indexOf(Location) < 0){ if (availableTags == "") { availableTags = Location; }else{ availableTags = availableTags + "," + Location; } } } if (sSearch != ""){ if (i % 2 == 0){ html = '
'; }else{ html = '
'; } html = html + ""; html = html + "" + companyName + " (" + location + ")"; //html = html + company + " " + location ; html = html + ""; html = html + "
"; //$("#searchResults").append(i + ' ' +x + ' ' + y + ' ' + sql + html); $("#searchResults").append(html); } i++; }); //$.each($('company',data),function(index, el) { if (populate){ PopulateFields(); }else{ alert("t: " + availableTags); return "test"; } }).error(function() { $("#searchResults").html("Results could not be retrieved. Alert T. McDermott"); }); //$.get(url, function(data){ alert("x: " + availableTags); return availableTags; }

您将返回ajax请求之外的值,因此$.get()部分仍然从服务器获取数据。 你不能这样操作,因为它是一个异步操作。 您有两个主要选择:

  1. 使它同步(糟糕,这会锁定大多数浏览器)
  2. 通过在完成后调用下一个函数,可以很好地处理异步行为。

你应该做的是调用someOtherFunction(availableTags);$.get(url, function(data){ })函数的末尾,它有数据并可以将它传递给任何需要它的东西。

您正在查看的是,一旦服务器将数据发送回浏览器,您就可以执行function(data) { }然后您可以从那里继续处理它。