У меня есть проблема, когда для этого же объекта в окне оповещения задается значение, а также выдается ошибка JS в браузере.
В строке - «alert (obj.xtagName)» даетсообщение об ошибке.Тем не менее, я также вижу правильный вывод, в диалоговом окне с предупреждением.
Довольно странно для меня.
Использование
Браузер: Chrome (v10.0.648.151)
Ошибка - Uncaught TypeError: Невозможно прочитать свойство 'xtagName' из неопределенного
Браузер: IE (v8.0.7600.16385CO)
Ошибка - значение obj.xtagName равно нулю илине объект
Объект с ошибкой - obj.xtagName
- У меня есть страница PHP (gXML.php), которая генерирует строку JSON.Этот JSON также проверяется с использованием "http://www.jsonlint.com/". с помощью вызова AJAX, я получаю этот JSON и преобразую его в объект JSON на основе responseText.
-Start of File: _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 String
{"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": []}]}]}