2011-08-21 47 views
0

我試圖從broadbandmap.gov使用json服務,以便我可以在一個區域顯示寬帶提供商及其速度。下面是一個簡單的網址:Consuming broadbandmap.gov json服務錯誤

http://www.broadbandmap.gov/internet-service-providers/70508/lat=30.1471824/long=-92.033638/%3Ejson

我使用jQuery消費服務,但它給我的螢火無效標籤錯誤:

var url = "http://www.broadbandmap.gov/internet-service-providers/70508/lat=30.1471824/long=-92.033638/%3Ejson"; 
     //var url = "http://www.broadbandmap.gov/broadbandmap/broadband/fall2010/wireline?latitude=" + lat + "&longitude=" + long + "&format=json"; 

     $.ajax({ 
      url: url, 
      dataType: 'json', 
      type: 'POST', 
      contentType: "application/json; charset=utf-8", 
      success: function (result) { 
       console.debug("in success"); 
       console.debug(result); 
       //success, execute callback function. 
      }, 
      error: function (result) { 
       console.debug("in error"); 
       console.debug(result); 
      } 
     }); 

奇怪的是,根據Firebug中的無效標籤錯誤它實際上具有正確的響應:

{「status」:「OK」,「responseTime」:7,「messa ... // www.cscic.state.ny.us/broadband/ 「}}}

我曾嘗試將dataType設置爲json,jsonp和其他類型以及無效。我也嘗試過GET而不是POST,但那也不起作用。有誰知道我錯過了什麼?

回答

1

發生該錯誤的原因是該服務正在返回JSON而不是JSONP。您的瀏覽器不會讓您從跨域來源直接處理JSON。

爲了使服務返回JSONP,您必須使用特殊格式的URL。如果您在未使用「/> json」修飾符(link)的情況下轉到搜索結果頁面,則會在頁面上看到一個鏈接,其中顯示「API調用」。如果將鼠標懸停在此鏈接上,它將爲您提供用於無線/有線API調用的正確URL。使用JSONP返回類型&回調函數,在您的ajax調用中使用這些URL中的一個,並且應該全部設置。

我在http://jsfiddle.net/qsY7h/1/創建了更新的小提琴。

+0

哇,你是對的。我有api調用URL(在問題的代碼中註釋掉),並嘗試使用jsonp數據類型,但是我錯過了回調參數。我曾經在firebug中看到過,jquery創建了一個回調參數,所以我不認爲必須手動創建它,但是這很有效。謝謝!! – Justin

+0

很高興我們得到它的工作! –

0

這是一個跨域請求,因此您應該使用JSONP數據類型 - API支持此返回類型。您在示例中提供的網址沒有爲我返回任何內容,因此我檢出了Broadbandmap's Developer Docs並找到了另一個電話。請在http://jsfiddle.net/szCAF/找到一個例子。

最重要的一點是「callback =?」在URL中。 jQuery使用它來告訴API什麼樣的函數名稱來包裝輸出(這一切都由jQuery透明地完成)。

+0

感謝您的回覆。正如我所提到的,我嘗試將dataType設置爲「jsonp」,它將追加參數附加到url,但它不起作用。這個網址不適合你 - http://www.broadbandmap.gov/internet-service-providers/70508/lat=30.1471824/long=-92.033638/%3Ejson ?? – Justin

+0

它昨天沒有工作,但它現在工作。我發佈了一個基於我在該頁面上找到的信息的新答案。 –