2012-05-23 82 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實例,然後使用它進行了測試。 –