Ошибка объекта JSON Uncaught TypeError: Невозможно прочитать свойство undefined - PullRequest
1 голос
/ 19 марта 2011

У меня есть проблема, когда для этого же объекта в окне оповещения задается значение, а также выдается ошибка 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": []}]}]}

1 Ответ

0 голосов
/ 19 марта 2011

obj - анонимная функция, а не объект, эквивалентный сценарию JSON. См. Строки 1 и 4 ниже, как указано в вашем коде.

1 var myobj = (new Function("return " + Xml2String))() 
2     tblvl = "xml_api_reply.finance";
3     tblvl = tblvl.split (".");
4     obj = myobj;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...