Подтвердить что ты не робот

ASP.NET: проблема jQuery AJAX 'data' param

У меня были проблемы с этим кодом, который я провел последние 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; }
}
4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

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

Ответ 3

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

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

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

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