2012-05-23 3 views
0

У меня есть простое приложение JQuery Stockwatcher, которое делает запрос JSONP, но функция обратного вызова не вызвана. У меня есть вызов JSON для работы этого приложения, но в некоторых точках он будет кросс-доменом, поэтому я должен сделать JSONP.Ошибка JQuery JSONP

Что я делаю неправильно? Когда я запускаю этот код, вызывается функция Error.

function loadData(data) { 
    alert("Load Data"); 
    $.each(data.stocks,function(i,item){ 
     $("#results").append('Title:'+item.symbol+' == Price:'+item.price+'</p>'); 
    }); 
} 

$(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 

     //$.ajaxSetup({ crossDomain: true, scriptCharset: "utf-8" , contentType: "jsonp; charset=utf-8"}); 
     $.ajax({ 
      url : url+query, 
      type: "GET", 
      dataType: "jsonp", 
      jsonp : "callback", 
      jsonpCallback: "loadData", 
      success: function(data) {alert("Success");}, 
      error: function(data) { alert("Error"); }, 

      });   
     }); 
}); 

Вот мой JSON выход, который я вижу в Firebug

{"stocks": [ 
    { 
    "symbol": "IPOD", 
    "price": 20.2182603350167, 
    "change": 0.3128265006354697 
    } 
]} 

Благодарности Раджеш

+0

- ваш серверный метод, подготовленный для обработки jsonp? –

+0

Разница между json и jsonp производится сервером: это сервер, который указывает обратный вызов, отвечая на 'thecallback (thejson)' вместо просто 'thejson'. Возможно, взглянув на этот ответ сервера JSONP, он станет более понятным: http://canop.org:8001/ –

ответ

0

То есть JSON, не JSONP. Если вы выполняете междоменный запрос JSON, это должен быть JSONP, а не JSON. Разный порт является междоменным.

Это JSONP, по которому ваш запрос должен быть возвращен на основе вашего кода. Кроме того, ваш метод loadData будет переопределен jquery IIRC.

loadData({"stocks": [ 
    { 
    "symbol": "IPOD", 
    "price": 20.2182603350167, 
    "change": 0.3128265006354697 
    } 
]}) 
+0

Спасибо, это сработало. У меня был другой экземпляр tomcat на другом порту, и я тестировал его. –