2009-06-30 11 views
16

Mam problemy z tym kodem, który spędziłam ostatnie 3 godziny na szukaniu odpowiedzi. Jako, że nie było udane, będę po prostu pisać kod i zapytać, jakiego rodzaju parametry powinny mam na usługi internetowej, aby obsłużyć tego żądania:ASP.NET: problem z danymi jQuery AJAX 'data'

var args = [{ key: 'myId', value: 'myValue' }, { key: 'myOtherId', value: 'myOtherValue'}]; 
var dataToSend = { name: 'fooId', value: 'fooValue', args: args }; 
$.ajax({ 
type: 'POST', 
url: 'fooURL', 
data: dataToSend, 
contentType: 'application/json; charset=utf-8', 
dataType: 'json', 
success: OnSuccess, 
error: OnError 
}); 

Teraz, jaki rodzaj podpisu powinien być w stanie zdobyć moją "dataToSend"?

Próbowałem:

[WebMethod, ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public string Foo(string name, object value, List<Args> args) 
{ 
    return "OK"; 
} 

public class Args 
{ 
    public string key { get; set; } 
    public object value { get; set; } 
} 

i

[WebMethod, ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public string Foo(string name, object value, object[] args) 
{ 
    return "OK"; 
} 

a także

[WebMethod, ScriptMethod(ResponseFormat = ResponseFormat.Json)] 
public string Foo(dataToSend dataToSend) 
{ 
    return "OK"; 
} 

public class dataToSend 
{ 
    public string name { get; set; } 
    public object value { get; set; } 
    public List<Args> args = new List<Args>(); 

} 
public class Args 
{ 
    public string key { get; set; } 
    public object value { get; set; } 
} 

Odpowiedz

22

Spróbuj przekazując dane jako ciąg znaków, a nie przedmiot, a mianowicie:

 
$.ajax({ 
    ... 
    data : '{ a: 2, b: 3 }', 
    ... 
}); 

Rozumowanie jest to, że jeśli określić obiekt jako dane następnie jQuery serializes danych przy użyciu formatu ciąg kwerendy, podczas gdy serwer oczekuje formatu JSON bezpośrednio.

Dzieje się tak, mimo że JQuery zaleca używanie JSON jako typu danych - wydaje się, że odnosi się tylko do wyniku, a nie do ładunku żądania wysłanego na serwer.

Wszystko, co tam masz, wygląda mi na poprawne.

+3

Całkiem pewna, że ​​Sam ma to tutaj. Sprawdź http://elegantcode.com/2009/02/21/javascript-arrays-via-jquery-ajax-to-an-aspnet-webmethod/, aby uzyskać więcej informacji. Zakładając, że string naprawi to, myślę, że będzie to pierwsza składnia. –

0

Jeśli pracujesz z JSON-NET włączony WebServices/WebMethods ... moje wskazówki są następujące:

  • Bądź ostrożny przy konfiguracji web.config. Użyj go, aby włączyć duże parametry, metodę POST i JSON.

  • Użyj szkieletu do obsługi deserializacji serializacji obiektów. Poleciłbym Json.NET NewtonSoft.

Nie sądzę, aby program ASP.NET automagicznie robił to za Ciebie, twoje parametry są zawsze ciągami. Powinieneś wziąć te struny, deserializować je i przekształcić w tablicę obiektów.

+0

Myślę, że tak. Sprawdź to (chociaż jest to MVC, ta sama koncepcja powinna dotyczyć formularzy internetowych): http://blogger.forgottenskies.com/?p=243 –

2

Mimo że jest to starszy wpis, pomyślałem, że przyczynię się do tego. Przesyłam tablicę asocjacyjną z tym samym pomysłem i zaakceptowanym postem, o którym pisanie jest łatwiejsze.

JavaScript

postData[0] = 'data!'; 
postData[1] = 'moar data!'; 
postData[2] = 'and some data'; 

$.ajax({ 
    type: 'POST', 
    url: 'postUrl', 
    data: { data: postData }, 
}); 

PHP

$data = $_POST['data'][0]; 
$moar_data = $_POST['data'][1]; 
$and_some_data = $_POST['data'][2]; 
Powiązane problemy