2011-11-10 174 views
1

我可以JavaScript對象不能恢復到web方法直通Ajax調用象下面這樣:返回對象AJAX Web服務方法

var person = {"FirstName":"Foo","LastName":"Bar"}; 

$.ajax({ 
    type: "POST", 
    url: url, 
    data: person, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    onSuccess: function() { alert('Success!'); }, 
    onError: function() { alert('Error'); } 
}); 

無效的JSON原始與上述方法拋出。 我會訴諸字符串操作是這樣的:

var person = {"FirstName":"Foo","LastName":"Bar"}; 
var json = '{person:' + JSON.stringify(person) + '}'; 

$.ajax({ 
    type: "POST", 
    url: url, 
    data: json, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    onSuccess: function() { alert('Success!'); }, 
    onError: function() { alert('Error'); } 
}); 

現在,這是工作的罰款,我可以逃脫這個解決方案,但生活是艱苦的,我們不希望更難!如果有一種方法可以直接傳遞對象我很想聽到它;)

+0

你有什麼類型的錯誤?首先一個例子工作正常。 – Oyeme

+0

@Oyeme:它拋出「無效的JSON原語:FirstName blahh」..它需要一個人包裝來重建對象,因此字符串操作..它在你的機器上工作? – Kagawa

+0

是的,它工作。你已經糾正了JSON格式{「FirstName」:「Foo」,「LastName」:「Bar」}; – Oyeme

回答

0

var json ='{person:'+ JSON.stringify(person)+'}';

做的工作:)

1

其原因可能是這樣的:

data: person 

實際發送這樣的:

FirstName=Foo&LastName=Bar 

因爲jQuery將該對象分解成一個POST友好的鍵/值集。第二個版本的原因是因爲它實際上是發送一個真正的JSON字符串。如果你這樣做:

data: JSON.stringify(person) 

這可能會工作。

+0

感謝您指出jQuery將對象分解爲鍵/值集!但數據:JSON.stringify(人)仍然不起作用。它現在拋出「無法將對象轉換爲類型'System.Collections.Generic.IDictionary [System.String.System.Object]'」 – Kagawa