2012-07-30 65 views
-2

有時候我see人JSON發送到服務器:無效的Json用法?

$.ajax({ 
url: ... 
contentType: "application/json; charset=utf-8", 
dataType: "json", 
data: { 'page': '100AAAAAf00' }, 
responseType: "json", 
success: ..., 
error: ... 
}); 

{ 'page': '100AAAAAf00' } JSON。

並說是的contentType JSON ...

JSON是文本表示。

例如:"{ 'page': '100AAAAAf00' }"

我在這裏錯過了什麼嗎? (難道jQuery是做幕後的一些翻譯?)

百科:

JSON或JavaScript對象符號,是一個基於文本的(!!) 開放標準設計爲人類可讀的數據交換。

+0

爲什麼這個問題是downvoted? – 2012-07-30 10:05:52

+0

我只能猜測,我沒有倒下自己,但是:因爲你開始說「它不是JSON」,這是有點..好..不是真的。因此,從這個陳述出來的任何問題都有點奇怪,因爲它始於一個無效的假設。實際上你可能會問「這是JSON」而不是僅僅說它不是? – Nanne 2012-07-30 10:11:38

+0

@Nanne ** {'page':'100AAAAAf00'}不是Json。 TRY PARSE它,你會看到!** – 2012-07-30 10:12:40

回答

3
$.ajax("/", { 

    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    data: { 
     'page': '100AAAAAf00' 
    }, 
    type: 'POST', 
    responseType: "json" 

}); 

是錯誤。這將發送一個正常的application/x-www-form-urlencoded請求,該請求體:

page=100AAAAAf00 

但因爲標題是"application/json; charset=utf-8",它實際上是躺在到服務器。

要發送,真正的,純粹的,實際的JSON與jQuery的服務器,你可以使用:

$.ajax("/", { 

    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    data: JSON.stringify({ //If data is string, jQuery will not try to process it 
     'page': '100AAAAAf00' 
    }), 
    type: 'POST', 
    responseType: "json" 

}); 

現在請求主體將是:

{"page":"100AAAAAf00"} 

而且不能與使用php的$_POST因爲它的工作原理基於application/x-www-form-urlencoded, 所以也許這就是爲什麼人們更喜歡前者..

人們可以使用Chrome的網絡選項卡中的開發工具在這裏驗證我的主張:

http://jsfiddle.net/sV5m4/1/ - 實際JSON使用JSON頭

enter image description here

這裏:

http://jsfiddle.net/sV5m4/2/ - X- www-form-urlencoded聲稱是json的標頭

enter image description here

+0

謝謝。所以我的問題已經到位了,對吧?我確實注意到有問題的情況代碼問題.....對嗎? (就像在我的主要問題示例中)... – 2012-07-30 15:32:59

+1

@RoyiNamir是你的問題中的代碼示例不發送json,但x-www-form-urlencoded – Esailija 2012-07-30 15:36:44

+0

:-(所以我不明白爲什麼這個問題是downvoted ....我認爲他們根本不知道差別... – 2012-07-30 15:37:39

1

有一個簡單的功能,將對象轉換爲一個JSON字符串...

JSON.stringify({ 'page': '100AAAAAf00' }) // => '{ "page": "100AAAAAf00" }' 

其他各地的道路......

JSON.parse('{ "page": "100AAAAAf00" }') // => { page: '100AAAAAf00' } 
1

在你的榜樣一切都是正確的, data屬性是一個對象。

由於jQuery.ajax(); docsdata屬性可能是對象,數組或字符串。

如果它是一個數組或對象,jQuery會對其進行序列化。

+1

所以數據本身不是json。 – 2012-07-30 10:08:10

+0

如果你設置了*字符串*,那麼你可以直接設置JSON。但顯然,任何不是字符串的東西都不能是JSON(因爲JSON是文本格式)。 – Thilo 2012-07-30 10:09:44

+1

在你的情況下,它不是JSON。這是一個對象。 – 2012-07-30 10:09:45