2011-12-05 48 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 –

相關問題