jquery自动完成 - 不从functon获取返回值 [英] Jquery AutoComplete - not getting return values from functon
问题描述
我确定我的编码有一百万个错误...
然而,除了autoComplete之外,一切正常。我似乎无法从我的searchResults函数返回值。
我想返回字符串。
现在
alert(t:+ availableTags) ;
可以工作但是
alert(x:+ availableTags);
不包含
我做错了什么?
$( (){
// $(input)。keyup(function(e){
var availableCompanies = searchResults('CompanyName',false);
var availableLocations = searchResults('Location',false);
$(input [id ^ ='CompanyName'])。 (function(){
// alert(CN);
searchResults('CompanyName',true);
}); // $(input [id = CompanyName] ).keyup(function(e){
$(input [id ^ ='Location'])。keyup(function(){
searchResults('Location',true); $ b $ );
$(input [id ^ ='serving'])。keyup(function(){
searchResults('serving',true);
});
$(#CompanyName).autocomplete({
source:availableCompanies
});
$(#Location).autocomplete({
source:availableLocations
});
alert(availableCompanies);
$ b $)$ // $(function(){})
function searchResults(which,populate,availableTags){
// clear search结果
$(#searchResults)。text();
//清除可用标记
//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(< tr>< td>对不起,没有结果< / td>< / tr>) ;
};
$ .each($('company',data),function(index,el){
uid = $(this).find('uid ').text();
companyName = $(this).find('CompanyName').text(); $ b $ 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 =< br /> + $(this).find('sql')。text()+< br />;
// alert(which ==CompanyName);
if(which ==CompanyName){
// availableTags = availableTags + companyName;
if(availableTags.indexOf(companyName)< 0){
if(availableTags ==){
availableTags = companyName;
} else {
availableTags = availableTags +,+ companyName;
$ b $ if(which == ==Location){
if(availableTags.indexOf(Location)< 0){
if(availableTags ==){
availableTags = Location;
} else {
availableTags = availableTags +,+ Location;
$ b if(sSearch!=){
if(i%2 == 0){
html ='< div id =c_'+ uid +'class =bgGrey>';
} else {
html ='< div id =c_'+ uid +'class =bgWhite>';
}
html = html +< tr>;
html = html +< td>< b& larr;< / b> + companyName +(+ location +)< / td>;
// html = html + company ++ location;
html = html +< / tr>;
html = html +< / div>;
//$(\"#searchResults\").append(i +''+ x +''+ y +''+ sql + html);
$(#searchResults)。append(html);
}
i ++;
}); ($;
if(populate){
PopulateFields();
} else {
alert(t:+ availableTags);
returntest;
}
})。error(function(){
$(#searchResults)。html(< tr>< td>无法检索结果.Tree T.McDermott< / td>< / tr>);
}) ;
alert(x:+ availableTags);
return availableTags;
}
解决方案您在
之外返回值 $。get()
仍然从服务器获取数据,您不能像这样操作,因为它是异步操作。 b
$ b
- 使它同步(坏,这会锁定大多数浏览器)
- 通过调用next函数完成。
你应该做的是调用
someOtherFunction(availableTags);
在你的$。get(url,function(data){})
函数的末尾,它有数据并且可以传递给它。
您所看到的是一旦服务器发送了
函数(data){}
数据回到浏览器a nd然后你可以处理它,所以你想从那里继续。I'm sure there are a million things wrong with my coding...
However everything works EXCEPT - the autoComplete.
I can't seem to return values from my searchResults function.
I want to return the string.
Right now
alert("t: " + availableTags);
works BUT
alert("x: " + availableTags);
does not
Neither return lines return the values.
What am I doing wrong?
$(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("<tr><td>Sorry, there are no results.</td></tr>"); }; $.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 = "<br />" + $(this).find('sql').text() + "<br />"; //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 = '<div id="c_' + uid + '" class="bgGrey">'; }else{ html = '<div id="c_' + uid + '" class="bgWhite">'; } html = html + "<tr>"; html = html + "<td><b>←</b>" + companyName + " (" + location + ")</td>"; //html = html + company + " " + location ; html = html + "</tr>"; html = html + "</div>"; //$("#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("<tr><td>Results could not be retrieved. Alert T. McDermott</td></tr>"); }); //$.get(url, function(data){ alert("x: " + availableTags); return availableTags; }
解决方案You're returning the value outside the ajax request, so the portion in
$.get()
is still getting data from the server. You can't operate like this since it's an asynchronous operation. You have 2 main options:
- Make it synchronous (bad, this locks up most browsers)
- Play nice with async behavior, by calling the next function when done.
What you should be doing is calling
someOtherFunction(availableTags);
at the end of your$.get(url, function(data){ })
function, where it has the data and can pass it along to whatever needs it.What you're looking at is that the
function(data) { }
executes once the server has sent the data back to the browser and you can then process it, so you want to proceed from there.这篇关于jquery自动完成 - 不从functon获取返回值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!