0

我有一个简单的 JQuery Stockwatcher 应用程序,它发出 JSONP 请求,但没有调用回调函数。我有这个应用程序的 JSON 调用,但在某些时候它将是跨域的,因此我必须使用 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
  }
]}

谢谢拉杰什

4

1 回答 1

0

那是 JSON,而不是 JSONP。如果是跨域 JSON 请求,必须是 JSONP 而不是 JSON。不同的端口是跨域的。

这是您的请求应根据您的代码返回的 JSONP。此外,您的 loadData 方法将被 jquery IIRC 覆盖。

loadData({"stocks": [
  {
    "symbol": "IPOD",
    "price": 20.2182603350167,
    "change": 0.3128265006354697
  }
]})
于 2012-05-23T14:22:15.093 回答