JavaScript 全局不保留范围?创建自动完成 Web 服务 JSON 对象
JavaScript global not keeping scope? creating an autocomplete webservice json object
嗨,我正在尝试自动完成城市列表,但返回的 json 对象未格式化为用于自动完成,
需要一个名为"label":"cityname"的字段来显示自动完成,所以我正在尝试使用 ajax 调用重新格式化 json 对象并将其写入全局变量,问题是一旦 ajax 调用返回, 我的 jsData 是一个空数组...我做错了什么?为什么全局变量不保留值?
http://www.andymatthews.net/read/2012/03/27/jQuery-Mobile-Autocomplete-now-available
<script>
$("#nec").bind("pageshow", function(e) {
var jsData = [];
$.ajax({
url: "http://localhost:8084/REST/resources/cities",
data:{},
type: 'GET',
crossDomain: true,
dataType: 'jsonp',
jsonp: 'jsonp',
jsonpCallback: 'jsoncallback',
error: function(error){
console.log(error);
},
success: function(result) {
for (i = 0; i < result.length; i++){
jsData.push({label:result[i].name, value:result[i]});
}
console.log(JSON.stringify(jsData));
},
});
$("#textinput").autocomplete({
target: $('#suggestions'),
source: jsData,
minLength: 1
});
});
</script>
我在JS方面有点新鲜,所以有一些事情我还没有掌握
你必须
把
$("#textinput").autocomplete({
target: $('#suggestions'),
source: jsData,
minLength: 1
});
在您的success()
函数中。
因为,jsData
在success()
内成为更新。执行pageshow
事件的匿名函数比执行success()
快。因此,在该函数中jsData
保持为空。
您可以通过自动完成本身来检索数据。看这里
问题是jsData
不是全局的,而是在匿名函数内的作用域。
var jsData = []; // make that here.
$("#nec").bind("pageshow", function(e) {
$.ajax({
url: "http://localhost:8084/REST/resources/cities",
data:{},
type: 'GET',
crossDomain: true,
dataType: 'jsonp',
jsonp: 'jsonp',
jsonpCallback: 'jsoncallback',
error: function(error){
console.log(error);
},
success: function(result) {
for (i = 0; i < result.length; i++){
jsData.push({label:result[i].name, value:result[i]});
}
console.log(JSON.stringify(jsData));
},
});
$("#textinput").autocomplete({
target: $('#suggestions'),
source: jsData,
minLength: 1
});
虽然,我不建议使用全局变量。但是,如果它对你有用,那就是你的愿望。
相关文章:
- 基于api密钥的NodeJS web服务
- 使用javascript在客户端上使用Web服务
- 如何通过安全的https连接在javascript中使用基于soap xml的Web服务
- 从Javascript连接到SOAP Web服务
- 如何将javascript对象作为参数传递到c#web服务中
- AngularJS:使用维基百科API的web服务
- 从javascript调用C#Web服务并使用它(json格式)
- 从简单的html页面调用实时Web服务.
- 在JavaScriptAjax调用中从web服务中的XMLDocument获取响应.
- 如何使用 javascript 从 Web 服务重新加载项目集合
- 创建web服务“;活动指示器”-与所有浏览器兼容的类似指示符
- 如何将WinJS ListView绑定到web服务
- Ajax不调用Web服务
- 将web服务回调的结果绑定到Javascript中的调用函数
- 如何创建可从多个应用程序使用的PHP登录web服务
- Ajax发布到双节点NLB上的web服务
- 无法使用javascript客户端访问远程web服务
- 使用带有AngularJS的DocRaptor web服务
- 如何使用phonegap在android中调用asp.net Web服务
- 如何使应用程序加载独立于web服务调用