jQuery UI الإكمال التلقائي استجابة JSON
-
25-09-2019 - |
سؤال
كنت أستخدم geonames.org لإكمال المدينة والدولة ، لكنني وجدت أنها بطيئة للغاية بحيث لا يمكن الاعتماد عليها. الكود الخاص بي على النحو التالي ، ويعمل (انتظر حوالي 10 ثوان لمشاهدة نتائج الإكمال التلقائي)
الكود القديم (العمل) هنا: http://jsbin.com/umewo3/2/edit
$(function() {
$( "#sf_city" ).autocomplete({
source: function( request, response ) {
$.ajax({
url: "http://ws.geonames.org/searchJSON",
dataType: "jsonp",
data: {
featureClass: "P",
style: "full",
maxRows: 10,
country: 'US',
name_startsWith: request.term
},
success: function( data ) {
response( $.map( data.geonames, function( item ) {
return {
value: item.name + (item.adminName1 ? ", " + item.adminCode1 : "")
}
}));
}
});
},
minLength: 2
});
});
الآن أنا أستخدم YQL لأنها توفر استجابة أسرع بكثير. المشكلة هي أنني لا يبدو أنني أفهم كيفية تعيين الاستجابة بشكل صحيح. يمكنك أن ترى أنني أرسل طلبًا تم تشكيله جيدًا ، واستعادة الاستجابة - لكنني لا أتعامل مع الاستجابة بشكل صحيح.
رمز جديد (مكسور) هنا: http://jsbin.com/aqoke3/2/edit
$(function() {
$( "#sf_city" ).autocomplete({
source: function( request, response ) {
$.ajax({
url: "http://query.yahooapis.com/v1/public/yql",
dataType: "json",
data: {
q: 'select name,admin1.code from geo.places where text="' + request.term + '*" and country.code="US" limit 10 | sort(field="popRank", descending="true")',
format: 'json',
callback: 'cbfunc'
},
success: function( data ) {
response( $.map( data.query.results.place, function( item ) {
return {
value: item.name
}
}));
}
});
},
minLength: 2
});
});
المحلول
لقد وجدت القضية. أنا أتعامل معها بشكل صحيح بعد كل شيء. تمكنت من إزالة P من نوع بيانات JSONP.
كل شيء على ما يرام: http://jsbin.com/aqoke3/4/edit
لا تنتمي إلى StackOverflow