正确设置通过jQuery / jQueryMobile中的AJAX调用检索的JSON数据中的变量

时间:2014-07-22 18:53:30

标签: jquery ajax json jquery-mobile

我有一个单页文件,多页面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 

1 个答案:

答案 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