2012-06-21 48 views
4

如果我有ASP Classic,是否可以構建一個REST樣式的應用程序編程接口(API),它接受JSON中的輸入和返回輸出,甚至可以進行內容協商並以JSON或XML或其他方式傳遞響應格式?我可以使用ASP Classic構建一個REST應用程序嗎?

作爲一個例子,ASP-Classic是否可以用作發送GET請求並期望JSON響應的jQuery自動完成小部件的後盾?

怎麼樣?

回答

9

當然,爲什麼不呢?

首先,您可以使用Javascript編寫ASP-classic。這意味着你可以利用很多Javascript擴展庫。特別是,在構建REST應用程序時,您可能需要使用json2.js

這是一個REST程序,它使用ASP-classic,使用參數化查詢查詢SQLExpress數據庫,並依靠json2.js進行編碼,並返回JSON編碼數組。

<%@ language="Javascript" %> 

<script language="javascript" runat="server" src='json2.js'></script> 
<script language="javascript" runat="server"> 

if (typeof String.prototype.trim != 'function') { 
    String.prototype.trim = function() { 
     return this.replace(/^\s\s*/, '').replace(/\s\s*$/, ''); 
    }; 
} 

(function() { 

    // http://msdn.microsoft.com/en-us/library/windows/desktop/ms675318(v=vs.85).aspx 
    // http://msdn.microsoft.com/en-us/library/windows/desktop/ms678273(v=vs.85).aspx 
    // http://msdn.microsoft.com/en-us/library/windows/desktop/ms675946(v=vs.85).aspx 
    ado = { 
     // data types 
     variant   : 12, 
     char    : 129, 
     varChar   : 200, 
     single   : 4, // DBTYPE_R4 
     date    : 133, // DBTYPE_DBDATE 
     time    : 134, // DBTYPE_DBTIME 

     // parameter directions 
     input   : 1, 
     output   : 2, 
     inputOutput  : 3, 
     returnVal  : 4, 
     directionUnknown : 0, 

     // command types 
     cmdUnspecified : -1, 
     cmdText   : 1, 
     cmdTable   : 2, 
     cmdStoredProc : 4, 
     cmdUnknown  : 8, 
     cmdFile   : 256, 
     cmdTableDirect : 512 
    }; 

    queryDb = function(like) { 
     var rs, result = [], cmd, query, param, 
      conn = new ActiveXObject("ADODB.Connection"); 

     conn.ConnectionString = 
      'Provider=SQLOLEDB.1;' + 
      'Integrated Security=SSPI;' + 
      'Persist Security Info=False;' + 
      'Initial Catalog=AVWKS2008LT;' + 
      'Data Source=.\\SQLEXPRESS'; 

     conn.Open(); 
     cmd = new ActiveXObject("ADODB.Command"); 
     cmd.ActiveConnection = conn; 
     cmd.CommandType = ado.cmdText; 
     query = 'SELECT distinct Lastname as lname ' + 
      'FROM SalesLT.Customer '; 
     if (like !== null) { 
      query += 'WHERE LastName like ? '; 
      like += '%'; 
      param = cmd.CreateParameter("", ado.varChar, ado.input, like.length, like); 
      cmd.Parameters.Append(param); 
     } 
     query += 'ORDER BY lname '; 
     cmd.CommandText = query; 

     rs = cmd.Execute(); // typeof ADODB.Recordset 
     while(!rs.EOF) { 
      // retrieve the 0th field 
      result.push(rs.Fields(0).Value.trim()); 
      rs.MoveNext(); 
     } 
     conn.Close(); 
     return result; 
    }; 

}()); 


try { 
    // jquery UI autocomplete requires the search term to be 'term' 
    var t = Request.QueryString('term') + '', 
     token = (t == 'undefined') ? null:t, 
     r = queryDb(token); 
    Response.Write(JSON.stringify(r)); 
} 
catch(e) { 
    var error = {error: e.message}; 
    Response.Write(JSON.stringify(error)); 
} 

</script> 
+0

不明白爲什麼你是問和回答你自己的問題:■ – AnthonyWJones

+2

@AnthonyWJones - 只是分享我所知道的,只是分享我所知道的。另請參閱:http://meta.stackexchange.com/a/2729/140407 – Cheeso

+0

我明白了,感謝您的鏈接。 – AnthonyWJones

0

ASP只是非常輕微的加強腳本引擎。如果你可以編碼它可以做到這一點。你可以通過Response.WriteResponse.BinaryWrite寫任何你喜歡的東西。所以答案是肯定的。

如果你要做JSON,你最好在JScript服務器端工作。然後您可以使用標準的JSON stringyfiers來生成JSON結果。

2

您也可以使用像我aspJSON類:https://github.com/rcdmk/aspJSON

' instantiate the class 
Dim oJSON = New JSON 

' add properties 
oJSON.Add "prop1", "someString" 
oJSON.Add "prop2", 12.3 
oJSON.Add "prop3", Array(1, 2, "three") 

' get the JSON formatted output 
Dim jsonSting 
jsonString = oJSON.Serialize() ' this will contain the string representation of the JSON object 
相關問題