обработать массив, размещенный с $ .ajax (jquery) в веб-сервисе - PullRequest
2 голосов
/ 22 апреля 2010

Я пытаюсь опубликовать данные в веб-сервис (asp.net 3.5), как показано ниже (два варианта, один комментарий):

var array = [3, 2, 5, 1, 7];
var jsonString = JSON.stringify(array);
//var jsonString = '{ "firstName": "John", "lastName": "Smith", "age": 25, "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": "10021" }, "phoneNumber": [ { "type": "home", "number": "212 555-1234" }, { "type": "fax", "number": "646 555-4567" } ] }'

$.ajax({
    type: "POST",
    url: "WebService2.asmx/AddRoute",
    data: jsonString,
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    processData: "false",
    error: function(msg) {
        alert('error' + msg.toString);
    }
});

Так что мне нужен соответствующий веб-метод, чтобы получить его. Примерно так:

[WebMethod]
public string AddRoute(/* xxx */)
{
    //handle data
}

Может, кто-нибудь уточнит, как я могу получить данные, где я набрал "xxx"? Я бы подумал, что "int [] array" поможет, но он не работает. Любая помощь будет принята с благодарностью:)

Ответы [ 5 ]

1 голос
/ 06 мая 2010

Я не знаком с ASP.NET, но должен быть какой-то способ для вас получить параметры запроса, которые передаются с использованием jQuery.ajax().

$.ajax({
    type: "POST",
    url: "WebService2.asmx/AddRoute",
    **data: {'some_data': jsonString},**
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    processData: "false",
    error: function(msg) {
        alert('error' + msg.toString);
    }
});

Параметром запроса будет some_data. Из вашего контроллера вы можете получить параметр запроса, не передавая его в качестве аргумента вашей функции.

Я прошу прощения за то, что это было расплывчато, поскольку я пришел из фона Python / Pylons.

0 голосов
/ 20 октября 2013

Ваш пост ajax должен быть примерно таким

$.ajax({
    type: 'POST',
    url: 'WebService2.asmx/AddRoute',
    data: '{arr:'+ JSON.stringify(array)+'}',
    contentType: 'application/json; charset=utf-8',
    dataType: 'json',
    success: function (msg) {
         console.log(msg.d);
         }
});

и ваш веб-метод

[WebMethod]
public string AddRoute(int[] arr) //parameter name and the name in data:{} should be same
{
    //handle data
}
0 голосов
/ 29 мая 2011

Объявите свой класс обслуживания как это

[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[System.Web.Script.Services.ScriptService]
public class WFSrvc
{
    // To use HTTP GET, add [WebGet] attribute. (Default ResponseFormat is WebMessageFormat.Json)
    // To create an operation that returns XML,
    //     add [WebGet(ResponseFormat=WebMessageFormat.Xml)],
    //     and include the following line in the operation body:
    //         WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml";
    [OperationContract]
    public void DoWork()
    {
        // Add your operation implementation here
        return;
    }

    [OperationContract]
    [WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.WrappedRequest, RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json)]
    [System.Web.Script.Services.ScriptMethod(UseHttpGet = true)]
    public string HelloWorld()
    {
        return "Hello World";

    }

}

вместо helloworld вы можете поставить свою собственную функцию

0 голосов
/ 12 мая 2010

Попробуйте что-то вроде следующего кода:
Вы могли бы также использовать int [] вместо string []


[WebInvoke(UriTemplate = "ServiceName", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, Method = "POST")]<br> public string ServiceName(string[] ids)

0 голосов
/ 22 апреля 2010

Вместо веб-службы .asmx вы должны просто предоставить метод действия asp.net mvc. Этот пост Фила Хаака показывает, насколько легко принимать строго типизированные данные json (включая массивы):
http://haacked.com/archive/2010/04/15/sending-json-to-an-asp-net-mvc-action-method-argument.aspx

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