2013-01-19 21 views
5

我正嘗試使用getJSON方法獲取我用jQuery編寫的自定義JSON訂閱源。由於一個未知的原因,URL似乎有從最後剝離cache_gen.php?location=PL4,並用[object%20Object]取代導致發生404錯誤。在jQuery中附加了[object%20Object]的JSON請求

這裏是jQuery的我使用的是:

var fetchData = function() { 

    if (Modernizr.localstorage) { 

     var api_location = "http://weatherapp.dev/cache_gen.php"; 
     var user_location = "PL4"; 
     var date = new Date(); 

     console.log(api_location + '?location=' + user_location); 

     jQuery.getJSON({ 
      type: "GET", 
      url: api_location + '?location=' + user_location, 
      dataType: "json", 
      success: function(jsonData) { 
       console.log(jsonData); 
      } 
     }); 

    } else { 
     alert('Your browser is not yet supported. Please upgrade to either Google Chrome or Safari.'); 
    } 
} 

fetchData(); 

從控制檯日誌中我可以看到URL字符串被正確地計算公式爲:http://weatherapp.dev/cache_gen.php?location=PL4

然而在控制檯下聯是:Failed to load resource: the server responded with a status of 404 (Not Found)

任何人都可以用這個指向正確的方向嗎?

更新19/01/2013 23:15

好吧,我剛剛轉換,這樣是適合文檔完全使用$.ajax。我還添加了一個失敗事件並記錄了傳遞給它的所有數據。

var fetchData = function() { 

    if (Modernizr.localstorage) { 

     var api_location = "http://weatherapp.dev/cache_gen.php"; 
     var user_location = "PL4"; 
     var date = new Date(); 

     var url = api_location + '?location=' + user_location; 

     console.log(url); 

     jQuery.ajax({ 
      type: "GET", 
      url: api_location + '?location=' + user_location, 
      dataType: "json", 
      success: function(jsonData) { 

       console.log(jsonData); 
      }, 
      error: function(jqXHR, textStatus, errorThrown) { 
       console.log('textStatus: ' + textStatus); 
       console.log('errorThrown: ' + errorThrown); 
       console.log('jqXHR' + jqXHR); 
      } 
     }); 

    } else { 
     alert('Your browser is not yet supported. Please upgrade to either Google Chrome or Safari.'); 
    } 
} 

fetchData(); 

在這之後我的控制檯給我以下信息:

http://weatherapp.dev/cache_gen.php?location=PL4 
download_api.js:44textStatus: parsererror 
download_api.js:45errorThrown: SyntaxError: JSON Parse error: Unable to parse JSON string 
download_api.js:46jqXHR[object Object] 

我已經確保了JSON飼料的標題是當前和飼料肯定是服務於有效的JSON(它有效地將緩存3第三方服務飼料以節省API的成本)。

+0

http://weatherapp.dev/cache_gen.php?location=PL4不是一個工作的網址。<-----點擊它 – Popnoodles

+0

@popnoodles,它可能是一個'/ etc/hosts'重定向:)。但是,當然'.dev'聽起來很腥 – Alexander

+0

.dev是一個開發領域。它已經在我的本地系統上設置了一個Apache虛擬主機,它在我的''''/ etc/hosts''中有一個條目,以確保正確解析。我可以在我的瀏覽器中訪問這個域,它與加載JS文件的域相同。 –

回答

5

爲什麼你看到此錯誤的原因:

http://weatherapp.dev/cache_gen.php?location=PL4 
download_api.js:44textStatus: parsererror 
download_api.js:45errorThrown: SyntaxError: JSON Parse error: Unable to parse JSON string 
download_api.js:46jqXHR[object Object] 

是因爲你的JSON是無效的。即使響應從服務器正確返回,如果dataType爲'json'且返回的響應格式不正確,JQuery將執行錯誤函數參數。

http://jsonlint.com是一種非常快速簡單的方法來驗證JSON字符串的有效性。

+0

再次感謝Adam。 –

+0

擴展@ Adam的好答案。更一般地說,調用中的「數據類型」值(顯式或隱含)與從服務器返回的實際數據之間的某些值不匹配。我指定「html」作爲我的數據類型,並得到這個錯誤。我省略了可選的數據類型參數,並停止查看錯誤。我肯定會返回html並插入頁面,但我願意向ajax女神鞠躬,並讓她認爲只要我的電話有效,我的返回值就是她想要的任何類型。 –

0

退房實際功能的使用:

http://api.jquery.com/jQuery.getJSON/

不能對對象參數傳遞到$.getJSON$.ajax,你的代碼應該是這樣的:

jQuery.getJSON('api_location + '?location=' + user_location) 
     .done(function() { 
      //success here 
     }) 
     .fail(function() { 
      //fail here 
     }); 

要說不定使它更清晰一點,$.getJSON只是一個「包裝函數」,最終會調用$.ajax{type:'get',dataType:'JSON'}。你可以在我上面提供的鏈接中看到。

+0

實際上OP更容易將.getJSON替換爲.ajax – Popnoodles

+0

@popnoodles爲什麼? OP沒有使用任何'$ .getJSON'沒有包含 – charlietfl

+1

@charlietfl的選項,因爲他們已經編寫了他們的代碼,就像他們應該使用.ajax一樣 - 只更改7個字符更容易。 – Popnoodles

0

今天我遇到了同樣的問題。在我的例子中,我將一個JSON對象分配給一個名爲'location'的變量,這個變量是JavaScript under Windows中的保留字,顯然是windows.location的縮寫!所以瀏覽器被重定向到當前的URL並附加了[object%20Object]。如果同樣的事情發生在你身上,簡單地使用'location'以外的變量名。希望這可以幫助某人。