ASP.NET: проблема с параметрами данных в jQuery AJAX - PullRequest
16 голосов
/ 30 июня 2009

У меня были проблемы с этим кодом, я провел последние 3 часа, копаясь и пытаясь найти ответ.Поскольку я не добился успеха, я просто опубликую код и спрашиваю, какие параметры я должен иметь в своем веб-сервисе для обработки этого запроса:

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

Теперь, какую подпись мне нужно иметьбыть в состоянии получить мой «dataToSend»?

Я пробовал:

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

и

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

, а также

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

Ответы [ 3 ]

22 голосов
/ 30 июня 2009

Попробуйте передать данные в виде строки, а не объекта, например:

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

Причина этого заключается в том, что если вы укажете объект в качестве данных, то jQuery сериализует данные, используя формат строки запроса, тогда как сервер ожидает формат JSON напрямую.

Это происходит несмотря на указание jQuery использовать JSON в качестве типа данных - похоже, это относится только к результату, а не к полезной нагрузке запроса, отправленной на сервер.

Все остальное, что у тебя есть, мне кажется правильным.

2 голосов
/ 10 июля 2012

Хотя это более старый пост, я думал, что внесу свой вклад. Я отправляю ассоциативный массив с той же идеей и принятым постом, мне просто легче писать.

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];
0 голосов
/ 30 июня 2009

Если вы работаете с JSON-поддержкой .NET WebServices / WebMethods ... мои советы:

  • Будьте очень осторожны с конфигурацией web.config. Используйте его для включения больших параметров, метода POST и JSON.

  • Использование каркаса для обработки сериализации объектов и десериализации. Я бы порекомендовал Json.NET от NewtonSoft.

Я не думаю, что ASP.NET автоматически сделает это за вас, ваши параметры всегда являются строками. Вы должны взять эти строки, десериализовать их и превратить в массив объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...