2011-11-15 68 views
1

當我使用JSON.parse(jsonString)時,JSON解析完全沒有問題。JSON.parse可以工作,但jQuery.getJSON返回http錯誤403

var result = JSON.parse(jsonString); 

但是當我使用jQuery.getJSON(jsonString)我收到一個HTTP錯誤403

var result = jQuery.getJSON(jsonString); 

任何想法,爲什麼一會的工夫,另一個會不會?他們都在讀字符串。

謝謝!

+3

閱讀[getJSON](http://api.jquery.com/jQuery.getJSON/)的文檔...它不讀取字符串,它向服務器發出請求並嘗試解析響應作爲JSON – Esailija

回答

5

它們都讀取字符串。

哦不!這兩種方法非常不同。他們沒有任何共同之處。他們正在完成兩項完全不同的任務。

第一隻解析JSON字符串變成一個JavaScript對象:

var result = JSON.parse('{"foo": "bar"}'); 
alert(result.foo); 

將顯示bar。另請注意,JSON.parse方法是現代瀏覽器中的一種內置方法。這是純粹的JavaScript,並且與jQuery完全無關。傳統瀏覽器不支持它。對於他們,您需要將json2.js腳本包含在您的頁面中。

The second執行AJAX通話,並希望作爲參數的URL:

jQuery.getJSON('/someserversidescript', function(result) { 
    // callback to be executed when the AJAX request succeeds 
}); 

正如你可以在這裏看到的參數是一個URL。撥打jQuery.getJSON('{"foo": "bar"}')完全沒有意義。我想這就是爲什麼你的服務器響應403錯誤,因爲這是你的服務器上無效的網址。它期望服務器將返回一個JSON字符串作爲響應。它只是一個簡寫:

$.ajax({ 
    url: '/someserversidescript', 
    type: 'GET', 
    dataType: 'json', 
    success: function(result) { 
     // callback to be executed when the AJAX request succeeds 
    } 
}); 
1

getJSON()是一個異步調用回返回一個JSON對象的服務器。 JSON.parse()接受一個字符串並在內存中返回一個JSON對象。他們完全不同。