Передача объекта javascript в веб-сервис через Jquery ajax - PullRequest
0 голосов
/ 31 декабря 2010

У меня есть веб-сервис, который возвращает объект

[WebMethod]
    public List<User> ContractorApprovals()

У меня также есть веб-сервис, который принимает объект

[WebMethod]
    public bool SaveContractor(Object u)

Когда я звоню через веб-сервис через Jquery:

function ServiceCall(method, parameters, onSucess, onFailure) {
    var parms = "{" + (($.isArray(parameters)) ? parameters.join(',') : parameters) + "}"; // to json
    $.ajax({
        type: "POST",
        url: "services/"+method,
        data: parms,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(msg) {
            if (typeof onSucess == 'function' || typeof onSucess == 'object')
                onSucess(msg.d);
        },
            error: function(msg, err) {
            $("#dialog-error").dialog('open');}
});

Я могу назвать первый просто отлично. Моей функции onSucess передается объект javascript, точно структурированный как мой объект User в сервисе.

Однако теперь у меня проблемы с возвратом объекта на сервер.

Я принимаю Object в качестве параметра на стороне сервера, поэтому не могу понять, что там есть проблема. Так что я думаю, что что-то не так с пармами на стороне клиента, но я не уверен, что ...

Я что-то делаю для эффекта

ServiceCall("AuthorizationManagerWorkManagement.asmx/ContractorApprovals",
      "",
      function(data,args){$("#div").data('user',data[0])},
      null)

тогда

ServiceCall("AuthorizationManagerWorkManagement.asmx/SaveContractor",
      JSON.stringify({u: $("#div").data("user")}) //dont work $("#div").data('user'), //These also do not work: "{'u': ' + $("#div").data("user") + '}", NOR JSON.stringify({u: userObject})
      function(data,args){(alert(data)},
      null)

Я знаю, что первый сервисный вызов работает, я могу получить данные. Во-вторых, метод onFailure выполняется вместо «OnSuccess».

Есть идеи?

UPDATE:

Я отправил свой последний кодовый блок в чек: JSON.stringify({u: $("#div").data("user")})

Теперь я получаю Invalid object passed in, member name expected. (1):

Но я понятия не имею, что значит ... Google обнаружил множество ошибок, но не проблема, как у меня ...

Ответы [ 3 ]

0 голосов
/ 31 декабря 2010
 ServiceCall("AuthorizationManagerWorkManagement.asmx/SaveContractor",
            "{u: " + JSON.stringify($("#div").data("user")) + "}",
            function(data, args) { alert(data); },
            FailedServiceCall);
0 голосов
/ 04 января 2012

Хорошо. Я разместил код и ссылку поверх Нажмите здесь !

    Default.aspx
        <%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs"   Inherits="_Default" %>             
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>

    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
    <script type="text/javascript">
        var url = '<%=ResolveUrl("~/WebService.asmx/HelloWorld")%>';
        $(document).ready(function() {
           $('#txtAutoSuggest').keyup(function() {
                var str = $("#txtAutoSuggest").val();
                var a = JSON.stringify({ name: str });
                CallService(a);
                  });

        });

     function CallService(a) {
        $.ajax({
            type: "POST",
           url: url,
           data: a,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
           success: function(data, status) {
                $('#lblResult').text(data.d);
            },
            error: Error
        });
    }
    function Error(request, status, error) {
        $('#lblResult').text("Not Matched");
    }
</script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:TextBox ID="txtAutoSuggest" runat="server"></asp:TextBox>
        <asp:Label ID="lblResult" Text="&nbsp;" Width="100%" runat="server" />
    </div>
</form>
</body>
</html>

ИЛИ

application.js

 var url = '<%=ResolveUrl("~/WebService.asmx/HelloWorld")%>';
        $(document).ready(function() {
            $('#txtAutoSuggest').keyup(function() {
                var str = $("#txtAutoSuggest").val();
                var a = JSON.stringify({ name: str });
                CallService(a);
            });

        });

    function CallService(a) {
        $.ajax({
            type: "POST",
            url: url,
            data: a,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(data, status) {
                $('#lblResult').text(data.d);
            },
            error: Error
        });
    }
    function Error(request, status, error) {
        $('#lblResult').text("Not Matched");
    }




<%@ WebService Language="C#" Class="WebService" %>
using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Collections;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;




 [WebService(Namespace = "http://tempuri.org/")]
 [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

// Чтобы разрешить вызов этой веб-службы из сценария с использованием ASP.NET AJAX или JQuery.

[System.Web.Script.Services.ScriptService]
 public class WebService  : System.Web.Services.WebService {

    [WebMethod]
    public string HelloWorld(string name)
    {
        Utility ut = new Utility();  // some class where you will have your database connection
        ArrayList suggestedProblemName = ut.getItems(name);  // some method of the class
        return ""+suggestedProblemName[0];
    } 
}
0 голосов
/ 31 декабря 2010

сериализация parms для json и отправка json на ваш серверный метод мне кажется подозрительным, я бы добавил больше тестов для этого куска кода ...

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