2014-04-01 74 views
2

返回結果集的數組從服務器我想使用從在一個結果返回了多個行中的值一次又一次調用過程,並顯示主HTML頁面在工作燈

適配器上被調用的過程的結果JS

var selectStatement = WL.Server.createSQLStatement("select * from medicine WHERE Name= ? "); 
var selectStatement2 = WL.Server.createSQLStatement("select LocId from location WHERE LocName= ? "); 
var selectStatement3 = WL.Server.createSQLStatement("select RegNo from storeloc WHERE LocId= ? "); 
var selectStatement4 = WL.Server.createSQLStatement("select RegNo from stormedavl where RegNo=? AND (MedId=? AND Availability=true)"); 
var selectStatement5 = WL.Server.createSQLStatement("select * from store WHERE RegNo= ? "); 



function getMedicineDetails1(Name,Location) { 
var a=getMedicineDetails(Name); 
var MedId=a.resultSet; 
var b=getLocId(Location); 
var LocId=b.resultSet; 
var c=getRegNo(LocId[0].LocId); 
var cc=c.resultSet; 
//here c.resultSet contains two rows 
var d={},e; 
if(cc && cc.length>0) 
{ 
    for(var i=0;i<c.resultSet.length;i++) 
     { 
      d[i]=getFinal(cc[i].RegNo,MedId[0].MedId); 


     } 
    return d; 


} 

} 
function getMedicineDetails(Name) {  

    return WL.Server.invokeSQLStatement({ 
     preparedStatement : selectStatement, 
     parameters : [Name] 
    }); 
} 
function getLocId(Location) { 
    return WL.Server.invokeSQLStatement({ 
     preparedStatement : selectStatement2, 
     parameters : [Location] 
    }); 
} 
    function getRegNo(LocId) { 
    return WL.Server.invokeSQLStatement({ 
     preparedStatement : selectStatement3, 
     parameters : [LocId] 
    }); 



} 
    function getFinal(RegNo,MedId) {  
      return WL.Server.invokeSQLStatement({ 
      preparedStatement : selectStatement4, 
      parameters : [RegNo,MedId] 
     }); 
    } 

    function getStoreDetails(RegNo) { 
     return WL.Server.invokeSQLStatement({ 
      preparedStatement : selectStatement5, 
      parameters : [RegNo] 
     }); 



    } 

JS文件

window.$ = window.jQuery = WLJQ; 
function wlCommonInit() { 

} 
$(document).ready(function(){ 

$("#search").click(function(){ 
GetEmployeeData(); 

}); 



}); 

var med; 

function GetEmployeeData() { 

var medicine= $("#medicine").val(); 
var location=$("#location").val(); 
alert(medicine); 

var invocationData = { 
    adapter : 'ATM', 
    procedure : 'getMedicineDetails1', 
    parameters: [medicine,location] 
}; 

WL.Client.invokeProcedure(invocationData,{ 
    onSuccess : loadFeedsSuccess, 
    onFailure : loadFeedsFailure 
}); 



} 
function loadFeedsSuccess(result){ 

    alert("Hii"); 
WL.Logger.debug("Feed retrieve success"); 

if (result.invocationResult.resultSet.length>0) 
{ 

    displayFeeds2(result.invocationResult.resultSet); 
} 
else 
    loadFeedsFailure(); 

} 

    function loadFeedsFailure(result){ 


alert("Values Not Found in DB"); 
} 
    function displayFeeds2(items){ 
alert("ii"); 
var table = document.getElementById("myTable1"); 
for(var i=0;i<items.length;i++) 
    { 
    var row = table.insertRow(i+1); 

    // Insert new cells (<td> elements) at the 1st and 2nd position of the "new" <tr> element: 
    var cell1 = row.insertCell(0); 
    cell1.innerHTML = items[i].RegNo; 
    } 

    } 
    function LoadResultPage() 
    { 
    $("AppDiv").hide(); 

    $("#itemsList").show(); 
    }; 

HTML文件

<!DOCTYPE HTML> 
<html> 
     <head> 
      <meta charset="UTF-8"> 
      <title>ATM</title> 
      <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0"> 
      <link rel="shortcut icon" href="images/favicon.png"> 
      <link rel="apple-touch-icon" href="images/apple-touch-icon.png"> 
      <link rel="stylesheet" href="css/ATM.css"> 
      <script>window.$ = window.jQuery = WLJQ;</script> 
     </head> 
     <body id="content" style="display: none;"> 
      <!--application UI goes here--> 
    <div id="AppDiv"> 
<h1> <img border="0" src="images/atm.png" width="50" height="50" align="middle"> 
<font color='white'> ANY TIME MEDICINE </font> 
</h1> 
<br> 
<div data-role="page" id="mainPage"> 
    <div data-role="header">search medicine 
    </div><br> 

     <hr> 
     <div data-role="content">  
     <input type="text" value="MEDICINE" id="medicine"><hr> 
     <input type="text" value="LOCATION" id="location"><hr> 
     <input type="submit" id="search" value="SEARCH"> 
     </div> 
</div> 
<div id="itemsList" data-role="page"> 

<table id="myTable1" border="1"> 
<tr> 
<th>Registration No</th> 
</tr> 
</table> 
    <div data-role="header">gg 
    </div> 
    <div data-role="content"> 
    </div> 
</div> 

<script src="js/initOptions.js"></script> 
<script src="js/ATM.js"></script> 
<script src="js/messages.js"></script> 
</div> 
</body> 
</html> 

問題是在輸出端我們只有一個RegNo(註冊號),而不是兩個,因爲從循環中調用了getFinal適配器過程。我想問我們如何存儲調用getFinal的結果過程,然後在html頁面顯示它們。基本上我想問一下,如果我們可以從服務器返回一個resultSets數組到他的客戶端。

+0

只是一個想法,但不應該在將它分配給d [i]之前解開getFinal(cc [i] .RegNo,MedId [0] .MedId)的結果嗎? –

+0

給我們需要返回結果集的客戶端,那麼如果我們解包並存儲結果集,我們將如何做到這一點 – user3476186

+1

返回一個包含解包結果數組的結果集。 –

回答

2

你需要做的是將getRegNo和getFinal的結果集合在一起。 這裏是如何從服務器

得到結果集的數組

更改您的密碼:在你的代碼

//here c.resultSet contains two rows 
var d={},e; 
if(cc && cc.length>0) { 
    for(var i=0;i<c.resultSet.length;i++) { 
     d[i]=getFinal(cc[i].RegNo,MedId[0].MedId); 
    } 
    return d; 
} 

,你會得到類似{0 : 'regNo_1', 1 : 'regNo_2'}其中整數是d[i]

到:

//here c.resultSet contains two rows 
    if (cc && cc.length > 0) { 
     for (var i = 0; i < cc.length; i++) { 
      cc[i].regNo = getFinal(cc[i].RegNo,MedId[0].MedId); 
     } 
     return {'regNos' : cc}; 
    } 
} 

爲了得到一個如下所示的resultSets數組:

{ 
    "regNos": [ 
     { 
     "regNo": 12345, 
     "regNo": { 
      "isSuccessful": true, 
      "regNo": [ 
       { 
        "regNo": "1" 
       } 
      ] 
     } 
     }, 
     { 
     "regNo": 54321, 
     "regNo": { 
      "isSuccessful": true, 
      "resultSet": [ 
       { 
        "regNo": "2" 
       } 
      ] 
     } 
     } 
    ], 
    "isSuccessful": true 
}