2013-07-12 1 views
0

안녕하세요. 여기에 .net 웹 서비스에 여러 개의 배열을 게시하는 데 어려움을 겪고 있습니다. 여기에 내 웹 서비스의 서명이 있습니다.자바 스크립트를 사용하여 .net webservice에 여러 배열을 게시하는 중

<WebMethod()> _ 
Public Function Lib_Processor(ByVal w_vendor As String(), _ 
          ByVal w_invoice As String(), _ 
          ByVal w_invdate As String(), _ 
          ByVal w_amount As Decimal(), _ 
          ByVal w_account As String(), _ 
          ByVal w_fund As String(), _ 
          ByVal w_org As String(), _ 
          ByVal w_prog As String(), _ 
          ByVal w_adrsstyp As String(), _ 
          ByVal w_adrss_seq As String(), _ 
          ByVal w_Row As String(), _ 
          ByVal w_bank As String(), _ 
          ByVal w_user As String(), _ 
          ByVal w_addl_info As String()) As List(Of GetErrors) 

나는 테이블을 반복 한 후 제대로 서비스에 보낼 수있는 개체를 만들 수 json.stringfy 사용하여 개체에 모든 값을 얻고있다.

이와같이.

 var invoice  = JSON.stringify({ w_invoice:w_invoice }); 
     var vendor  = JSON.stringify({ w_vendor: w_vendor }); 
     var invdate  = JSON.stringify({ w_invdate:w_invdate }); 
     var amount  = JSON.stringify({ w_amount:w_amount }); 
     var fund  = JSON.stringify({ w_fund:w_fund }); 
     var org   = JSON.stringify({ w_org:w_org }); 
     var prog  = JSON.stringify({ w_prog: w_prog }); 
     var account  = JSON.stringify({ w_account: w_account }); 
     var adrsstyp = JSON.stringify({ w_adrsstyp:w_adrsstyp }); 
     var adrss_seq = JSON.stringify({ w_adrss_seq:w_adrss_seq }); 
     var Row   = JSON.stringify({ w_Row:w_Row }); 
     var bank  = JSON.stringify({ w_bank:w_bank }); 
     var user  = JSON.stringify({ w_user:w_user }); 
     var addl_info = JSON.stringify({ w_addl_info: w_addl_info }); 

는 내가 배열에 보내 내 서비스에 전화 makea.

$.ajax({ 

      type: "POST", 

      contentType: "application/json; charset=utf-8", 

      data: '{w_vendor:"' + w_vendor + '",w_invoice:"' + w_invoice + '",w_invdate:"'+w_invdate + "}", 
      //data: "{"+vendor, invoice, invdate, amount,account,fund,org,prog,adrsstyp,adrss_seq,Row,bank,user,addl_info +"}", 
      // "{"+ vendor+invoice+invdate+amount+account+fund+org+prog+adrsstyp+adrss_seq+Row+bank+user+addl_info+"}" 
      url: "ServiceApUtils.asmx/Lib_Processor", 

      dataType: "json", 

      success: respond, 

      error: function (e) { $('.result').html("An Error Occured"); } 



     }); 

그러나이 메신저는 단순히 한 서비스에 많은 JSON 개체를 보내려고하기 때문에 비참하게 난 이유를 이해할 수 실패합니다. 내가 어떻게 고칠 수 있니? 난 그냥

var thisInvoice = {INVOICE:INVOICE} 

기본적으로

 var dto = { 'INVOICE': INVOICE }; 
     var PnJ = JSON.stringify(dto); 

처럼 하나의 객체 일을 시도했지만이 작동하지 않습니다. 내 서비스로 보내려면이 개체를 어떻게 적절하게 조정할 수 있습니까? 도움을 주시면 대단히 감사하겠습니다.

+0

마지막 예제가 "작동하지 않는 이유"를 설명해주십시오. –

+0

json 문자열을 json 문자열 안에 정확히 두는 이유는 무엇입니까? 왜 단지 하나의 json 문자열을 가지고 있지 않은가? 이 구조는 의미가 없습니다. 이것은'w_vendor' 주위에 큰 따옴표가 없기 때문에 자체적으로 # 1 잘못된 json 인'{w_vendor : "{\"w_vendor \ ": \"somevalue \ "}"}'입니다. # 2는 당신이 원하는 것 같지 않은 중첩 json 문자열입니다. –

+0

내 오류를 지적 해 주셔서 감사합니다. 당신은 해결책을 제안 할 수 있습니까? 나는 json 문자열을 제대로 작성하지 않고 있지만 예제가 먼 길을 간다는 것을 이해합니다. – Miguel

답변

0

frustruation의 시간 후에 나는 것들을 내 자신의 길을하기로 결정하고 여기에 내가 생각 해낸 것입니다. 나는 내가 읽고 웹 서비스에 HTML 데이터를 보내려면 아약스를 사용해야하는 HTML 테이블이 있습니다. jquery를 사용하여 다음과 같은 테이블 데이터를 읽습니다.

/* webservice variables*/ 
var w_vendor = []; 
var w_invoice = []; 
var w_invdate = []; 
var w_amount = []; 
var w_account = []; 
var w_fund = []; 
var w_org = []; 
var w_prog = []; 
var w_adrsstyp = []; 
var w_adrss_seq = []; 
var w_Row = []; 
var w_bank = []; 
var w_user = []; 
var w_addl_info = []; 
var w_activity = []; 
var w_location = []; 
var w_bank = []; 

다음에 우리는 단순히 이러한 기능을 호출했습니다.

function GetAllTableRows() { 
    try{ 

     //var MyInvoice = []; 
     $('#ADPControlProcessor_GridView1 tbody tr').each(function (index, value) { 
      var row = GetRow(index) 
      //MyInvoice.push(row); 


     }); 

     $.ajax({ 

      type: "POST", 

      contentType: "application/json; charset=utf-8", 

      data: '{' + 'w_vendor:[' + w_vendor + "],w_invoice:[" + w_invoice + "],w_invdate:[" + w_invdate + "]," + "w_amount:[" + w_amount + "],"+ 
         "w_account:[" + w_account + "]," + "w_fund:[" + w_fund + "]," + "w_org:[" + w_org + "]," + "w_prog:[" + w_prog + "]," + "w_adrsstyp:[" + w_adrsstyp + "]," + 
         "w_adrss_seq:[" + w_adrss_seq + "]," + "w_Row:[" + w_Row + "]," + "w_bank:[" + w_bank + "]," + "w_user:[" + w_user + "]," + "w_addl_info:[" + w_addl_info+"]" + "}", 

      url: "ServiceApUtils.asmx/Lib_Processor", 

      dataType: "json", 

      success: respond, 

      error: function (e) { $('.result').html("An Error Occured"); } 



     }); 




    } 
    catch (err) 
    { 
     alert(err) 

    } 
    //return MyInvoice; 
} 
function respond() { 

    alert('worked!') 

} 
function GetRow(rowNum) 
{ 
    try{ 
     var row = $('#ADPControlProcessor_GridView1 tbody tr').eq(rowNum); 


     w_vendor.push('"'+ row.find('td:eq(2)').text().trim()+'"'); 



     w_invoice.push('"' + row.find('td:eq(1)').text().trim()+'"' ); 




     w_invdate.push('"' + row.find('td:eq(3)').text().trim() + '"'); 


     w_amount.push('"' + row.find('td:eq(4)').text().trim() + '"'); 

      w_fund.push('"' + row.find('td:eq(5)').text().trim() + '"'); 


      w_org.push('"' + row.find('td:eq(6)').text().trim() + '"'); 


      w_account.push('"' + row.find('td:eq(7)').text().trim() + '"'); 


      w_prog.push('"' + row.find('td:eq(8)').text().trim() + '"'); 


       w_activity.push('"' + row.find('td:eq(8)').text().trim() + '"'); 

       w_location.push('"' + row.find('td:eq(8)').text().trim() + '"'); 


       w_addl_info.push('"' + row.find('td:eq(11)').text().trim() + '"'); 



    w_adrsstyp.push('"' + row.find('td:eq(12)').text().trim() + '"'); 


    w_adrss_seq.push('"' + row.find('td:eq(13)').text().trim() + '"'); 


    w_Row.push('"' + row.find('td:eq(14)').text().trim() + '"'); 


    w_user.push('"' + "MIGUEL83_BANNER" + '"'); 

    w_bank.push('"' + "2" + '"'); 


    } 
    catch (err) 
    { 
     alert (err) 
    } 

    //return INVOICE; 
} 

기능 "GetAllTableRows()는"단순히 행이 everysingle 행을 얻고 변수에 값을 넣어 함수를 호출합니다. 이것은이 사이트에서 실제로 발견 한 코드입니다. 그러나 나는 json stringify를 사용하려고 시도했다. 그러나 서비스가 12 또는 13 문자열 배열을 기대하지만 내 서비스의 서명을 보면이 특별한 경우에 대한 내 요구가 스위트는 아닐 것이다. 그러나 내가 본 모든 예제는 서비스 변경을 기대한다. 수업을 만들고 등등. 그런데 나는 여기에서 그 능력을 가지고 있지 않으므로 여기에 차선책이있다. 어떻게 할거 니? 당신은 당신 자신의 문자열을 만들고, 내가 "getRow()"함수에서했던 것을 인용한다. 나는 모든 문자열을 큰 따옴표와 결합하여 연결한다. 다음 jquery 사양 및 json 사양에 따라 데이터 paremeter 문자열을 서식을 지정합니다. 예, 조금 아프지 만 아주 유용합니다. 뒤늦은 지쳐서 나는 나를 위해 모든 문자열을 형식화하는 도우미 함수를 만들 수 있었지만 아픈 것은 내 미래의 프로젝트에 남겨 둘 수 있었다.이 사람이 다른 사람을 도울 수 있기를 바랍니다.

0

확인 두 가지 :

  • 귀하의 JSON 문자열이 유효

  • 내가 가서 당신을 건의 할 것

    JSON 문자열 이름은 또한 pagemethod

에 속성 이름과 일치 복잡한 유형을 WebMethod에 전달하는 방법을 설명하는 아래 링크를 클릭하십시오.

http://encosia.com/using-complex-types-to-make-calling-services-less-complex/

+0

나는 이미 사이트를 살펴 보았고 추천을 받으면 내가 할 수없는 웹 서비스를 변경해야 할 것이다. – Miguel

관련 문제