我有一个单页文件,多页面jQueyMobile应用程序,它向数据服务发出多个请求。数据以JSON格式返回。有些请求发生在应用程序的首页上,但其他请求会在用户通过应用程序时动态发生。
在几个页面中,我使用main函数调用数据来检索数据,然后使用成功和错误函数来处理数据的接收(或不接收)。 e.g。
function getStuff(thisKey) {
$.ajax({
type: "POST",
url: dataURL,
cache: false,
data: {docid:thisKey},
success: getStuffSuccess,
error: getStuffError,
async: true,
beforeSend: showSpinner,
complete: hideSpinner
});
}
function getStuffSuccess(data, status){
// do stuff on success
}
function getStuffError(data, status){
// do stuff on success
}
这种方法在整个应用程序中都有效。但是,我似乎已经使用上述方法的这个版本达到了极限
function getDocumentData(thisKey) {
$.ajax({
type: "POST",
url: documentDataURL,
cache: false,
data: {docid:thisKey},
success: onDocumentDataSuccess,
error: onDocumentDataError,
async: true,
beforeSend: showSpinner,
complete: hideSpinner
});
}
function onDocumentDataSuccess(data, status){
// trim data
data = $.trim(data);
console.log(data);
// parse data
var resultData = JSON.parse(data);
console.log(resultData);
// set var data
var document_id = resultData.ID;
console.log(document_id);
}
function onDocumentDataError(data, status){
// blah
}
前两个console.log中都有有效数据。当我设置document_id时,它在控制台中以未定义的形式返回。
正如我之前所说,尽管其他调用以相同的方式正常运行,但仍会发生这种情况。
我已经在这里阅读了其他帖子并尝试了各种事情,在调用控制台中返回的数据之间存在某些时间问题的情况下,在true和false之间切换调用的async属性。此外,我已经完成了剩余的代码,以确保我不会共享任何变量名称 - 无论我尝试什么,我都可以使它工作。
我是否可以在jQueryMobile应用程序中对这些请求的数量进行某种限制?这是否是提出这些要求的正确方法?
感谢阅读 - 非常感谢任何建议。
干杯 DOM
console.log返回以下内容:
HTTP POST后
XHR finished loading: POST "http://localhost/businessguardnet/app/index.cfm? method=document". jquery-1.9.1.min.js:5
send jquery-1.9.1.min.js:5
b.extend.ajax jquery-1.9.1.min.js:5
getDocData business-shield.js:305
createDocumentPageView business-shield.js:365
(anonymous function) VM230:1
修剪数据后
{"COLUMNS":["ID","DOCTITLE","DOCPRECIS","DOCFILENAME","DOCFILESIZE","DATEADDED"],"DATA":[[156,"Electricity - Kitchen","<html \/>","electricity_kitchen.doc",108544,"July, 16 2010 13:37:22"]]} business-shield.js:323
解析数据后
Object {COLUMNS: Array[6], DATA: Array[1]}
COLUMNS: Array[6]
0: "ID"
1: "DOCTITLE"
2: "DOCPRECIS"
3: "DOCFILENAME"
4: "DOCFILESIZE"
5: "DATEADDED"
length: 6
__proto__: Array[0]
DATA: Array[1]
0: Array[6]
0: 156
1: "Electricity - Kitchen"
2: "<html />"
3: "electricity_kitchen.doc"
4: 108544
5: "July, 16 2010 13:37:22"
length: 6
__proto__: Array[0]
length: 1
__proto__: Array[0]
__proto__: Object
business-shield.js:327
在set变量(在这种情况下,这是console.log(resultData.ID)但是如果我执行console.log(document_id),我会得到相同的结果)
undefined
答案 0 :(得分:0)
我认为这取决于服务返回数据的方式。我发现如果我做了以下
data = $.trim(data);
var resultData = JSON.parse(data);
var document_data = resultData.DATA[0];
var document_id = document_data[0];
然后document_id将返回一个值
感谢所有回复的人。
干杯 DOM