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

Posted

技术标签:

【中文标题】从通过 jQuery/jQueryMobile 中的 AJAX 调用检索到的 JSON 数据正确设置变量【英文标题】:Correctly setting variables from JSON data retrieved via an AJAX call in jQuery/jQueryMobile 【发布时间】:2014-09-13 17:59:17 【问题描述】:

我有一个单一文件、多页的 jQueyMobile 应用程序,它向一项数据服务发出多个请求。数据以 JSON 形式返回。一些请求发生在应用的首页上,但其他请求在用户继续浏览应用时动态发生。

在几页中,我使用 main 函数调用数据来检索数据,然后调用成功和错误函数来处理数据的接收(或不接收)。例如

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 之间切换,以防控制台中返回的数据之间存在时间问题。此外,我还检查了其余的代码,以确保我没有共享任何变量名——无论我尝试什么,我都无法让它工作。

我在 jQueryMobile 应用程序中可以发出的这些请求的数量是否达到了某种限制?这是发出这些请求的正确方法吗?

感谢阅读 - 非常感谢任何建议。

干杯 多姆


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

在设置变量处(在这种情况下,这是 console.log(resultData.ID) 但如果我执行 console.log(document_id),我会得到相同的结果)

undefined 

【问题讨论】:

您是否检查过浏览器开发工具以查看您在 HTTP 响应中得到了什么? 如果执行 console.log(resultData.ID) 会发生什么?这也是未定义的吗? 请检查resultData是否包含ID?或者如果您将在控制台中看到的响应分享会更好。 感谢大家的帮助 - 我已经更新了上面的 console.log 【参考方案1】:

我认为这取决于服务返回数据的方式。我发现如果我执行以下操作

data               = $.trim(data);
var resultData     = JSON.parse(data);
var document_data  = resultData.DATA[0];
var document_id    = document_data[0];

那么 document_id 会返回一个值

感谢所有回复的人。

干杯 多姆

【讨论】:

以上是关于从通过 jQuery/jQueryMobile 中的 AJAX 调用检索到的 JSON 数据正确设置变量的主要内容,如果未能解决你的问题,请参考以下文章

如何阻止动态元素在 Jquery/Jquery Mobile 中重新绑定?

在jquery mobile中输入焦点,但键盘没有出现

在 div 内捏合/缩放,但不是整个页面 [关闭]

如何保护应用程序免受第 3 方 js 库中存在的 XSS 向量的影响?

修复 JQM ajax 单页导航上的淘汰多个绑定

学习web前端都需要会啥软件