2011-12-05 23 views
0

我已经Google'd这件事死亡,很多人有同样的问题,但常见的修复是不是为我工作..jquery获取json并返回第一个作为标签?

我是从我的家庭服务器返回的数据:

{ 
    "errors": 1.15, 
    "allErrors": null, 
    "threads": 10.83, 
    "sale": 131.36, 
    "delivery": 1.68, 
    "failed": 60, 
    "webErrors": 432, 
    "webErrorsByMin": 0 
} 

我曾尝试:

  $.ajax({ 
       type: "GET", 
       url: "http://srv3.localhost:8080/monitor/Totals?callback=?", 
       dataType: "jsonp", 
       success: function(data) { 
        var items = []; 
        $.each(data, function(key, val) { 
         items.push('<li id="' + key + '">' + val + '</li>'); 
        }); 
        } 
      }, "jsonp"); 

我也曾尝试:

$.getJSON("http://srv3.localhost:8080/monitor/Totals?callback=?", 
        function(data){ 

         var result = eval("(" + data + ")"); 
       }); 

它一直试图设置第一个键作为标签..

Firefox的错误:

invalid label 
"address": 1.8, 

我已经尝试了很多不同的东西,但它总是回来作为一个标签..我的谷歌搜索后,常见的修复是利用封装回报:

var result = eval("(" + data + ")"); 

但它不是我的情况下工作.. :(

任何人都知道这是为什么不为我工作?使用jquery 1.4.2

谢谢!

+0

这不是JSONP。你需要让服务器端返回一个有效的语句。 – SLaks

+0

我试过用“json”也没有运气。 – Dennis

+0

您必须使用JSONP来提出跨域请求。你需要了解JSONP是什么。 – SLaks

回答

0

我相信结果会被混淆到data.d

您可以通过查看使用Firebug的JSON返回并对请求和响应进行网络捕获来验证此情况。

+0

data.d是什么时候json请求来自Windows服务器?我正在使用Apache-Coyote/1.1。我确实检查了萤火虫的网络和响应,看起来完全像上面的数据示例,网络json选项卡只是键,值(正是我想如何使用它们!lol) – Dennis

0

你试过这个吗?

for (var key in data){ 
    items.push('<li id="' + key + '">' + data[key] + '</li>'); 
} 
+0

Yup ..得到无效标签..尝试使用你的代码,得到相同的..奇.. – Dennis

0

您从服务器返回JSON和假设你正在做一个跨域调用,这就是为什么你需要一个JSONP请求。

您需要将您的JSON数据封装到您通过参数callback传递的函数中。

你的JavaScript代码,似乎是相当不错,但你的服务器代码需要做这样的事情:

HandleRequest() 
BEGIN 
    callbackFunction = REQUEST.PARAMETER["callback"] 
    RESPONSE.WRITE callbackFunction + "(" + jsonSerializedData + ")" 
END 

PS:你并不需要做JSONP请求,如果你是在同一个请求服务器。

+0

服务器端是一个tomcat服务器,我没有访问代码.. – Dennis

+0

这是跨域访问策略。您的服务器必须提供函数定义来针对JSONP –

相关问题