2012-05-22 2 views
2

Я борюсь с getJSON. У меня есть простое приложение StockWatcher, который возвращает данные в формате JSONКак читать данные из JQuery getJSON

http://localhost:8080/StockWatcherServer/stockwatcher/stockPrices?q=ABC+DEF+PQR 

Выход:

({ 
    "stocks": [{ 
     "symbol": "ABC", 
     "price": 80.11611442288577, 
     "change": 1.4332410131550721 
    }, { 
     "symbol": "DEF", 
     "price": 89.47611015580729, 
     "change": -1.469336678470048 
    }, { 
     "symbol": "PQR", 
     "price": 99.60017237722221, 
     "change": -1.3303545392913447 
    }] 
}) 

Когда я использую простую функцию Javascript, чтобы прочитать это, я получаю ошибку (.error, .complete и .second полный)

Я использовал Firebug для отладки это, и я могу видеть, что я могу получить объект, но я вижу ошибку XML

XML Parsing Error: syntax error Location: moz-nullprincipal:{0daef08f-94bc-4bea-879f-6456e8175e38} Line Number 1, Column 1:

({"stocks": [^

Это Javascript.

<script type="text/javascript"> 
$(document).ready(function(){ 
var url='http://localhost:8080/StockWatcherServer/stockwatcher/stockPrices?q='; 
var query; 
    $('button').click(function(){ 
     query=$("#query").val(); 
     // Assign handlers immediately after making the request, 
     // and remember the jqxhr object for this request  
     var jqxhr = $.getJSON(url, function(data) { 
      var obj = $.parseJSON(data); 
      $.each(obj,function(i,item){ 
       $("#results").append('Title:'+item.symbol+' == Price:'+item.price+'</p>'); 
      }); 
     }) 
     .success(function(data) { alert("second success"); }) 
     .error(function(data) { alert("error"); }) 
     .complete(function(data) { alert("complete"); }); 
     // perform other work here ... 

     // Set another completion function for the request above 
     jqxhr.complete(function(){ alert("second complete"); });  
    }); 
}); 
</script> 

Я экспериментировал с различными вариантами вызова parseJSON и без parseJSON, , но кажется, что это не работает.

+1

Действительно ли он возвращается с сервера с помощью() вокруг него (как в вашем примере ({«акции»: [{...]}))? Потому что я вложил все в круглые скобки ({«акции»: [{...]}) в онлайн-инструмент http://json.parser.online.fr/, и он правильно перевел его в объект, точно так же, как parseJSON , Постскриптум предполагая, что там есть скобки, вызывающие проблему, вам не понадобится parseJSON, потому что getJSON() позаботится об этом. –

+0

@JohnMunsch: Я думал то же самое. '()' Вызывают эту ошибку, теряют их. –

+0

Ваша страница также работает на 'http: // localhost: 8080'? Если нет, вам нужен JSONP вместо JSON. Кроме того, '$ .getJSON' анализирует его для вас, вам не нужно' $ .parseJSON'. –

ответ

1

Я думаю, что вы ищете что-то более, как это ... Попробуйте:

$(document).ready(function(){ 
var url='http://localhost:8080/StockWatcherServer/stockwatcher/stockPrices?q='; 
var query; 
    $('button').click(function(){ 
     query=$("#query").val(); 

     // Assign handlers immediately after making the request, 
     // and remember the jqxhr object for this request  
     $.ajax({ 
     url : url, 
     type: "GET", 
     dataType: "json", 
     success: function(data) { 
      $.each(data.stocks,function(i,item){ 
       $("#results").append('Title:'+item.symbol+' == Price:'+item.price+'</p>'); 
      }); 
     }, 
     error: function(data) { alert("error"); }, 
     }); 

     // perform other work here ... 
    }); 
}); 
+0

'$ .getJSON' не работает. –

+1

Я хотел сделать это .ajax, а потом я занят. – Jason

+0

Хорошо, я сделал две вещи, как вы оба предложили. Во-первых, я удалил начальный «(« и окончание ») в данных JSON/ Во-вторых, я сменил вызов с .getJSON на .ajax, одно небольшое изменение - мне пришлось ссылаться на запасы в данных. $ .each (data.stocks, function (i, item ...... Мой вопрос: в чем цель .getJSON, я думал, что это оболочка вокруг .ajax, которая делала GET –

0

Если вы используете "(" и ")" в оригинальном формате JSON, попробуйте следующее:

{ 
    "stocks": [ 
     { 
      "symbol": "ABC", 
      "price": 80.11611442288577, 
      "change": 1.4332410131550721 
     }, 
     { 
      "symbol": "DEF", 
      "price": 89.47611015580729, 
      "change": -1.469336678470048 
     }, 
     { 
      "symbol": "PQR", 
      "price": 99.60017237722221, 
      "change": -1.3303545392913447 
     } 
    ] 
} 
Смежные вопросы