我遇到了一个问题,即同一个Object在警报窗口中提供值,并在浏览器中显示JS错误。
在行 - “alert(obj.xtagName)”给出错误消息。 虽然,我也在警告对话框中看到了正确的输出。
对我来说很奇怪。
浏览器:Chrome(v10.0.648.151)
浏览器:IE(v8.0.7600.16385CO)
带错误的对象 - obj.xtagName
- 我有PHP页面(gXML.php),它生成JSON字符串。此JSON也使用“http://www.jsonlint.com/”进行验证。 使用AJAX调用,我得到这个JSON并根据responseText将其转换为JSON对象。
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;
} }
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);}
-
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对象的对象。那么,什么会导致其中一个错误,而其他工作正常。
更奇怪的是我有相同代码的另一个版本,它没有很好的组织,代码工作正常。
请帮助。
{"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": []}]}]}
答案 0 :(得分:0)
obj
是一个匿名函数,而不是与JSON脚本等效的对象。请参阅以下第1行和第4行,引用自您的代码。
1 var myobj = (new Function("return " + Xml2String))()
2 tblvl = "xml_api_reply.finance";
3 tblvl = tblvl.split (".");
4 obj = myobj;