CouchDB getJSON не возвращает то, что я ожидал - PullRequest
0 голосов
/ 14 октября 2011

У меня есть тестовая учетная запись на iriscouch

Я пытаюсь написать процедуру для обработки возвращенного JSON.

function getMyJson(url) {
    $('#dispJson').html('<h3>Json Data from: ' + url);
    data = $.getJSON(url);
    $.each(data, function(key, val) {
        $('#dispJson').append('key: ' + key + ' Val: ' +  val + '<br />');
    });
    return true;
};

Но мне кажется, что я получаю JSON обратно, но не то, чтоЯ ожидал

Результаты

key: readyState Val: 1
key: setRequestHeader Val: function ( name, value ) { if ( !state ) { var lname = name.toLowerCase(); name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; requestHeaders[ name ] = value; } return this; }
key: getAllResponseHeaders Val: function () { return state === 2 ? 
......
jQuery.type( elem ); if ( type === "array" ) { deferred.done.apply( deferred, elem ); } else if ( type === "function" ) { callbacks.push( elem ); } } if ( _fired ) { deferred.resolveWith( _fired[ 0 ], _fired[ 1 ] ); } } return this; }
key: statusCode Val: function ( map ) { if ( map ) { var tmp; if ( state < 2 ) { for( tmp in map ) { statusCode[ tmp ] = [ statusCode[tmp], map[tmp] ]; } } else { tmp = map[ jqXHR.status ]; jqXHR.then( tmp, tmp ); } } return this; }

Фактически я получаю этот ответ от любого URL, который я использую на сайте IrisCouch.

У меня для JSONP установлено значение true, и я такжепротестировано с? callback =?добавлено к URL.

Я надеюсь, что кто-то узнает вывод, который я получаю, и может посоветовать мне, что я неправильно понял или сделал неправильно.

Спасибо, mcl

Ответы [ 2 ]

0 голосов
/ 15 октября 2011

Большое спасибо. Сейчас работает как я ожидал. DataType действительно должен быть указан как 'jsonp' (я думаю, потому что это междоменный доступ), и для ясности я добавил тип 'get'.

$.ajax({
    url: myurl,    // eg http://mysite.iriscouch.com/mydatabase or whatever valid curl command
    type: 'get',
    dataType: 'jsonp',
    success: function(data) {
        $.each(data, function(key, val) {
            $('#dispJson').append('key: ' + key + ' Val: ' +  val + '<br />');
        });
    }
});

Просто нужно выяснить, как определить значения как массивы, а затем обработать их. Я предполагаю, что мог бы закончить со многими уровнями, и где-то есть красивая иерархическая подпрограмма дерева, которая делает все это. Но мы должны научиться этому с нуля.

Еще раз спасибо

0 голосов
/ 14 октября 2011

Вы устанавливаете data для объекта XHR, возвращаемого jQuery. Помните, что XHR является асинхронным, поэтому вы не можете ожидать немедленного получения результата.

Вместо этого вы должны делать что-то вроде этого:

$.ajax({
    url: url,
    dataType: 'json',
    success: function(data) {
        $.each(data, function(key, val) {
            $('#dispJson').append('key: ' + key + ' Val: ' +  val + '<br />');
        });
    }
});

Обязательно прочитайте документацию: http://api.jquery.com/jQuery.getJSON/

...