【发布时间】:2011-07-18 17:48:32
【问题描述】:
我有一个问题,在警报窗口中为同一个对象提供值,以及在浏览器中提供 JS 错误。
在行 - “alert (obj.xtagName)” 给出错误消息。 不过,我也在警报对话框中看到了正确的输出。
对我来说很奇怪。
使用
浏览器:Chrome (v10.0.648.151)
错误 - 未捕获的类型错误:无法读取未定义的属性“xtagName”
浏览器:IE (v8.0.7600.16385CO)
错误 - 'obj.xtagName' 为 null 或不是对象
有错误的对象 - obj.xtagName
- 我有生成 JSON 字符串的 PHP 页面 (gXML.php)。此 JSON 也使用“http://www.jsonlint.com/”进行验证。 使用 AJAX 调用,我得到这个 JSON 并根据 responseText 将其转换为 JSON 对象。
-文件开头:_ajax.js
AJAX 代码调用
function gQuote_getData() {
var request = _getHTTPObject();
var url = "php/gXML.php";
if (request) {
request.onreadystatechange = function() {gQuote_parseResponse(request);};
request.open( "GET", url, true );
request.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 1900 00:00:00 GMT");
request.send(null);
return true;
} else {
return false;
} }
XMLRespObj
function _getHTTPObject() {
var xhr = false;
if (window.XMLHttpRequest) {
xhr = new XMLHttpRequest();
} else if (window.ActiveXObject) {
try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
xhr = false;
}
}
}
return xhr;}
接收响应
function gQuote_parseResponse(request) {
var resp;
if (request.readyState == 4) {
if (request.status == 200 || request.status == 304) {
//Helps trim extra space at beginning and end of contruct
resp = (request.responseText.replace(/^\s+|\s+$/g, ''));
}
}
fillOutput (resp);
//printX(gQuote_JSON);}
- 文件 js/_ajax.js 结束
-
HTML 页面 JS 脚本
function fillOutput (resp_text) {
document.getElementById("output").value = resp_text
printX(resp_text) }
function printX (r_text) {
var Xml2String = r_text;
var myobj = (new Function("return " + Xml2String))()
tblvl = "xml_api_reply.finance";
tblvl = tblvl.split (".");
obj = myobj;
for (var tg in tblvl )
{
var xtag;
try {
xtag = obj.xtagName;
if (obj.xtagName == tblvl[tg])
{
//alert (obj.xtagName + obj.tags.length)
obj = obj.tags[0]
}
}
catch (e) {
//xtag = obj.xtagName;
}
}
alert (obj.xtagName)
alert (obj.tagAttrb.data) }
在行 - “alert (obj.xtagName)” 给出了上述错误消息。 不过,我也在警报对话框中看到了正确的输出。
我浏览了这个论坛的各种主题,但找不到类似的东西。 到目前为止我发现的是关于 - 格式错误的 JSON(带有额外的逗号) - 对 jQuery 的担忧(这里我没有使用 jQuery)
我在这里想念的重点是什么。我只是一个基本的 JS 用户。
其次,“xtagName”和“tagAttrb”都是来自同一个 JSON 对象的对象。那么,是什么导致其中一个出错而其他工作正常。
更奇怪的是我有另一个版本的相同代码,它组织得不好,代码运行良好。
请帮忙。
以下是 JSON 字符串的摘录
{"xtagName":"xml_api_reply",
"tagAttrb":{"version":"1"}
, "tags": [
{"xtagName":"finance",
"tagAttrb":{"module_id":"0", "tab_id":"0", "mobile_row":"0", "mobile_zipped":"1", "row":"0", "section":"0"}
, "tags": [
{"xtagName":"symbol",
"tagAttrb":{"data":".BSEREAL"}
, "tags": []},
{"xtagName":"pretty_symbol",
"tagAttrb":{"data":".BSEREAL"}
, "tags": []},
{"xtagName":"daylight_savings",
"tagAttrb":{"data":"true"}
, "tags": []}]}]}
【问题讨论】: