簡體   English   中英

在Firefox和Chrome中使用jQuery提取JSON結果時出現問題(IE8 Works)

[英]Problem Fetching JSON Result with jQuery in Firefox and Chrome (IE8 Works)

我正在嘗試使用jQuery解析JSON,但遇到了問題。 使用下面的代碼,數據保持為空:

<!DOCTYPE html>
<html>
  <head>
    <title>JSON Test</title>
  </head>
  <body>
    <div id="msg"></div>
    <script src="http://code.jquery.com/jquery-latest.js"></script>
    <script>
        $.ajax({
          url: 'http://datawarehouse.hrsa.gov/ReleaseTest/HGDWDataWebService/HGDWDataService.aspx?service=HC&zip=20002&radius=10&filter=8357&format=JSON',
          type: 'GET',
          dataType: 'json',
          success: function(data) {
            $('#msg').html(data[0].title); // Always null in Firefox/Chrome. Works in IE8.
          },
          error: function(data) {
            alert(data);
          }
        });
    </script>
  </body>
</html>

JSON結果如下所示:

{"title":"HEALTHPOINT TYEE CAMPUS","link":"http://www.healthpointchc.org","id":"tag:datawarehouse.hrsa.gov,2010-04-29:/8357","org":"HEALTHPOINT TYEE CAMPUS","address":{"street-address":"4424 S. 188TH St.","locality":"Seatac","region":"Washington","postal-code":"98188-5028"},"tel":"206-444-7746","category":"Service Delivery Site","location":"47.4344818181818 -122.277672727273","update":"2010-04-28T00:00:00-05:00"}

如果我用Flickr API URL替換URL( http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=? ),我將獲得一個有效的JSON結果能夠利用。

我已經在JSONLint上成功驗證了我的JSON,因此對於我可能做錯了什么,我已經用盡了所有想法。

有什么想法嗎?

更新:我讓客戶端將內容類型切換為application / json。 不幸的是,我仍然遇到同樣的問題。 我還更新了HTML,並包含了我一直在使用的實時URL。

更新2:我只是在IE8中進行了嘗試,效果很好。 由於某些原因,它在Firefox 3.6.3或Chrome 4.1.249.1064(45376)中均不起作用。 我確實注意到返回的數據有錯誤(開發人員正在返回數據的集合,即使對於總是返回單個記錄的查詢也是如此),但這仍然讓我感到困惑,為什么它在其他瀏覽器中不起作用。

可能需要注意的是,我正在使用本地文件系統上的HTML文件。 我以為這可能是XSS問題,但這並不能解釋Flickr為何起作用。

Flickr的API支持JSONP ,而您要連接的API不支持。

jQuery看到=? 並且了解有一個JSONP回調請求並創建了一個。 您可以在示例頁面使用的jQuery庫的5003行上看到它。

所以,你需要改變兩件事

  1. 將回調參數添加到您的請求。 您(或您的開發人員)想要調用的任何東西。 假設您選擇cb因此將其添加到AJAX請求中: &cb=? (通過這種方式,我們讓jQuery為我們處理回調的創建)
  2. 讓您的開發人員使服務接受此新參數,並在返回結果之前用它“填充”結果。

您是否考慮過使用更靈活的$ .ajax? 我將其分解,看看默認的$ .getJSON是否沒有為您提供所需的信息。

$.ajax({
   url: 'results.json',
   type: 'GET',
   dataType: 'json',
   success: function(data, status)
   {
       alert(data);
   }
});

將是等效的ajax“父”實現。 試着摸索一下,看看是否需要設置特定屬性。

內容是否用作“ application / json”?

如果一個網址(flickr網址)有效,而另一個網址(您自己的網址)無效,我想說問題出在您的網址上。

看起來您正在使用相對路徑,這是您的意圖嗎? 您是否使用Firebug的網絡面板查看請求的外觀?

這是跨域請求錯誤的情況。 Flickr Works,因為它是JSONP,而其他網址則不起作用,因為它未啟用JSONP。 1.檢查該URL是否支持JsonP 2.如果不支持,請在您的本地域(與網頁所在的域相同)中創建一個代理Web服務。3.調用該代理Webservice,該代理WebService進而從服務器端調用外部URL。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM