2011-09-13 41 views
2

我在其他SO帖子中看到「javascript是JSON」。我很難將這個理論翻譯成我的應用程序。我執行POST使用jQuery在POST上讀取javascript對象爲JSON

$.ajax({ 
     type: 'POST', 
     url: 'Pricing/Create', 
     data: items, 
     success: function() { alert('successfully called pricing'); }, 
     dataType: 'json' 
    }); 

的成功後打在我PricingControllerCreate方法斷點。在審查我的Request.QueryString時,它是空的。

itemsSomeItemlength = 30的數組。定義爲

function SomeItem(description, finalPrice, percentDiscount) { 
    this.Description = description; 
    this.FinalPrice = finalPrice; 
    this.PercentDiscount = percentDiscount; 
} 

我不執行JSON轉換,因爲「javascript是JSON」。我如何獲得定價控制器中的數據?


幾乎在那裏。當 JSON.stringify(items)運行我看到一套漂亮的垃圾在我的警報()(也還算在Firebug):

[{"Description":"some item","Data2":"$1.00","data3":"10"},//...

但是,當它到達服務器...在C#Request.Form它看起來像:

%5b%7b%22Description%22%3a%22some+item%22%2c%22data2%22 wtflip是...

+0

「 JSON是JavaScript,「愛麗絲急忙回答道。 「至少JavaScript是JSON--這是同樣的事情,你知道。」 「沒有一點!」 Resig說。 「你可能會說'JQuery是JavaScript'和'JavaScript是jQuery'是一樣的!」 「你可能會說,」Gruber補充說,「'XHTML是XML'和'XML是XHTML'是一樣的!」 「你可能會這麼說,」IE瀏覽器似乎在睡夢中說,「ActiveXObject是一個XMLHttpRequest對象,與'XMLHttpRequest對象是一個ActiveXObject'是一樣的!」 「它*與你一樣,」Resig說。 – sdleihssirhc

+1

@sdleihssirhc的更多藥物 –

+0

雖然JSON可以被看作是JavaScript,但是通過電線來回傳輸數值是一個完全不同的野獸。 –

回答

3

你試過JSON.stringify()

您可以將數據線更改爲:

data: JSON.stringify(items), 

如果目標瀏覽器本身不支持JSON.stringify(),你可以爲谷歌庫,填補了該功能。

+0

+1我現在使用'JSON.stringify(items)'。數據現在進入。它在Firebug中看起來不錯。但是,在Request.Form中,對象所在的位置會被丟棄。有很多'%5b%7b%22'亂碼。不知道它是什麼。 'HtmlDecode'沒有解決它。無論出現什麼問題,JavaScriptSerializer都不能反序列化:錯誤「無效的JSON基元:」。 –

+2

這就是'[{「'。你不想'HtmlDecode'那個,你想'UrlDecode'它,儘管MVC3固定了JSON解碼位,但是如果沒有的話,James Newton-King's根據我的經驗,Json.NET是一個優秀的JavsScript序列化器/解串器 –

+0

我從來沒有聽說過UrlDecode!Geez,難怪,謝謝,你救了我的臉!你搖滾 –

1

好吧,如果你使用POST方法,那麼它不會在查詢字符串變量。如果您使用類似提琴手的工具觀看正在發生的事情,您的數據(項目)是否會在請求正文中傳回?如果是這樣,那麼你應該可以訪問它。否則,您的AJAX請求出現問題。

+0

+1啊,好的。我很習慣做$ .get()我甚至沒有想過這個。在FireBug中,我看到30個鍵/值對全部設置爲「未定義」。 –

5

JSON是'JavaScript Object Notation',而不是JavaScript。您使用JSON來表示一個JavaScript對象,尤其是當您想要將其發送回服務器時。

你需要將它傳遞給Ajax調用之前,您的JavaScript對象到JSON轉換 - 這應該做的伎倆:

var json = $.toJSON(items); 

對此有讀,它可能會幫助:http://haacked.com/archive/2010/04/15/sending-json-to-an-asp-net-mvc-action-method-argument.aspx

+0

'JSON.stringify(...)比'$ .toJSON(...)更好'的原因在博客文章 – Rafay

+0

中提到雖然相關,這更好的不是答案的要點。 –