web-dev-qa-db-fra.com

ASP.NET: jQuery AJAX problème de données

J'ai eu des problèmes avec ce code que j'avais passé les 3 dernières heures à chercher et à trouver une réponse. Comme je n'ai pas réussi, je vais simplement poster le code et demander quel type de paramètres je devrais avoir sur mon service Web pour traiter cette demande:

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
});

Maintenant, quel type de signature je devrais avoir à pouvoir obtenir mon "dataToSend"?

J'ai essayé:

[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; }
}

et

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

et aussi

[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; }
}
16
Andre Gallo

Essayez de transmettre les données sous forme de chaîne, pas d'objet, c'est-à-dire:

 $. ajax ({
 ... 
 données: '{a: 2, b: 3}', 
 ... 
 }); 

La raison en est que si vous spécifiez un objet en tant que données, jQuery sérialise les données en utilisant le format de chaîne de requête, alors que le serveur attend directement le format JSON.

Cela se produit même si jQuery a demandé à JSON d'utiliser le type de données - cela semble ne concerner que le résultat, pas la charge utile de la demande envoyée au serveur.

Tout ce que vous avez là me semble correct.

22
Sam

Bien que ce soit un ancien post, je pensais que je pourrais contribuer. J'ai envoyé un tableau associatif même idée d'un post accepté, je trouve juste qu'il est plus facile d'écrire.

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];
2
Fermis

Si vous travaillez avec des WebServices/WebMethods .NET prenant en charge JSON ..., voici mes conseils:

  • Soyez très prudent avec la configuration de web.config. Utilisez-le pour activer les grands paramètres, la méthode POST et JSON.

  • Utilisez un framework pour gérer la sérialisation et la désérialisation des objets. Je recommanderais Json.NET de NewtonSoft.

Je ne pense pas qu'ASP.NET le fasse automatiquement pour vous, vos paramètres sont toujours des chaînes. Vous devriez prendre ces chaînes, les désérialiser et les transformer en un tableau d'objets.

0
wtaniguchi