Вопрос по asp.net, jquery, ajax – ASP.NET: проблема с параметрами данных в jQuery AJAX

16

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

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

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

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

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

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

Error: User Rate Limit Exceededelegantcode.com/2009/02/21/…Error: User Rate Limit Exceeded
0

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

  • Be very careful with web.config configuration. Use it to enable big parameters, POST method and JSON.

  • Use a framework to handle Object serialization e deserialization. I would recommend NewtonSoft's Json.NET.

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

Я думаю, что это так. Проверьте это (хотя это MVC, та же самая концепция должна быть применена к веб-формам):blogger.forgottenskies.com/?p=243 Andre Gallo
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];

Похожие вопросы