2010-12-31 2 views
0

나는 객체JQuery와 아약스를 통해 웹 서비스에 자바 스크립트 객체를 전달

[WebMethod] 
    public List<User> ContractorApprovals() 
에게 반환하는 웹 서비스가 나는 또한 내가 jQuery를 통해 내 웹 서비스 호출을 할 때 객체

[WebMethod] 
    public bool SaveContractor(Object u) 

을 accepcts Web 서비스를

:

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 함수는 서비스에서 내 User 객체처럼 정확하게 구조화 된 javascript 객체를 전달받습니다.

그러나 개체를 서버로 다시 가져 오는 데 문제가 있습니다.

개체를 서버 측에서 매개 변수로 받아들이고 있으므로 거기에 문제가 있다고 생각하지 않습니다. 그래서 내가 뭔가를 생각하고하면 클라이언트 측의 PARMS에 문제가 있습니다하지만 난 내가

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) 
일을하고

... 확실히 어떤 아니에요

첫 번째 서비스 호출이 작동한다는 것을 알고 데이터를 얻을 수 있습니다. 두 번째 방법은 "onSuccess"대신 "onFailure"메서드를 실행하는 것입니다.

아이디어가 있으십니까?

업데이트 : 내가 사용하는 내 마지막 코드 블록을 chaed

: JSON.stringify({u: $("#div").data("user")})

을 지금 Invalid object passed in, member name expected. (1):

얻을 그러나 나는 수단이 ... 구글가 많이 켜져 것을 아무 생각이 없다 오류,하지만 내 문제는 ...

+0

FireFox에 추가 기능을 사용하여 시작하십시오. 각 아약스 호출의 응답을 확인할 수 있도록 콘솔 탭을 활성화하십시오. 서버 측 코드에서 예외가 될 수 있습니까? 매개 변수를 보내는 방법에 문제가 있습니까? – house9

+0

개발자 도구는 무엇입니까? ie8에 대한 애플 리케이션 개발 ... 내가 디버그 켜져, 그리고 아약스 전화를 실행하고 아무것도 디버거에 happend. 나는 뭔가를 켜야합니까? – kralco626

+0

확인.문제는 어떻게 든'JSON.stringify()'에 의해 반환 된 문자열이 '{}'을 괄호로 묶는 추가 세트를 가지고 있다는 것입니다. 나는'params = parms.substring (1, parms.length-1); '을했다. 그러나 나는이 해결책을 좋아하지 않는다. 누구든지 그것을 해결할 올바른 방법을 알고 있습니까? 나는 그것이 stringify 함수에 전달되는 대괄호와 관련이 있다고 생각하지만, 어떻게해야하는지 모르겠다. – kralco626

답변

0

json에 parms 직렬화 및 서버 측 방법으로 보내는 json은 의심 스럽습니다. 코드 조각에 더 많은 테스트를 추가 할 것입니다 ...

0
ServiceCall("AuthorizationManagerWorkManagement.asmx/SaveContractor", 
      "{u: " + JSON.stringify($("#div").data("user")) + "}", 
      function(data, args) { alert(data); }, 
      FailedServiceCall); 
0

나는이 코드뿐만 아니라 링크를 게시했습니다. here!

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> 

또는

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를 사용하여, 스크립트에서 호출 할 수 있도록하려면 application.js.

[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]; 
    } 
} 
관련 문제