2011-04-19 38 views
5

我想發送JSON post請求到rails 3服務器。然而,導軌服務器接收數據如下
$.ajax({ type: 'POST',
contentType: "application/json",
url: url, data: {email: "[email protected]", password: "password"},
success: onSuccess,
error: onError,
dataType: "json"
});
如何發送json請求到rails使用jquery


{"_json"=>["object Object"]}
,我想它接受它爲:
{"email"=>"[email protected]", "password"=>"[FILTERED]"}

我認爲這正在發生的事情,因爲我有以下Ajax請求如果內容類型是json,jquery會用_json對象包裝數據。

有人知道我該怎麼做嗎?

回答

4

這原來是因爲在舊版本的jQuery的錯誤。我現在用戶jquery版本1.5和發送後請求如下:

$.post(url, { email: emailVal, password: passwordVal }, callback, "json").error(errorHandler); 

它現在工作得很好。

0

根據jquery文檔,它似乎是如果你傳入一個對象數據,它會嘗試一些自動反序列化。

設置processData: false然後將數據設置爲json字符串。

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

+0

感謝您的回答。我已經嘗試過不反序列化它,但它不是問題。 – katsuya 2011-04-19 19:45:38

2

你試圖做自己的序列化(使用jQuery.param)?

jQuery.param({email: "[email protected]", password: "password"}) 
==> "email=example%40test.com&password=password" 

使您的Ajax請求變爲:

$.ajax({ type: 'POST', 
contentType: "application/json", 
url: url, data: $.param({email: "[email protected]", password: "password"}), 
success: onSuccess, 
error: onError, 
dataType: "json" 
}); 
+0

實際上,jquery在默認情況下序列化傳遞的數據。 – katsuya 2011-04-20 08:55:08

+0

@knoguchi - yep - jQuery.param是jQuery用來序列化對象的東西。我只是想知道如果在別處做序列化(而不是自己做的.ajax)將有助於解決問題。 – 2011-04-20 09:38:33

+0

感謝您的建議。我已經嘗試過按照你的建議手動序列化,但不幸的是它沒有改變任何東西。 – katsuya 2011-04-20 14:22:53