Вопрос по asp.net, jquery, ajax – ASP.NET: проблема с параметрами данных в jQuery AJAX
У меня были проблемы с этим кодом, последние 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; }
}
Попробуйте передать данные в виде строки, а не объекта, то есть:
$.ajax( { ... data : '{ a: 2, b: 3 }', ... } );
Это объясняется тем, что если вы указываете объект в качестве данных, jQuery сериализует данные, используя формат строки запроса, тогда как сервер ожидает формат JSON напрямую.
Это происходит несмотря на указание jQuery использовать JSON в качестве типа данных - похоже, это относится только к результату, а не к полезной нагрузке запроса, отправленной на сервер.
Все остальное, что у вас есть, выглядит для меня правильно.
Если вы работаете с 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 автоматически сделает это за вас, ваши параметры всегда являются строками. Вы должны взять эти строки, десериализовать их и превратить в массив объектов.
Хотя это старый пост, я думал, что внесу свой вклад. Я отправляю ассоциативный массив с той же идеей и принятым постом, мне просто легче писать.
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];