我不会使用 Web 服务来执行此操作。我使用精简的 Web 表单和它的代码隐藏文件来实现您想要做的事情。
这是我的 Handler.aspx 文件内容:
<% Page Language="C#" AutoEventWireup="True" CodeFile="Handler.aspx.cs" Inherits="Customer_Handler" %>
您的文件内容会略有不同。我所做的只是在 aspx 文件的第一行之后添加一个新的 Web 表单并删除所有 HTML 标记。无论如何,在 Handler.aspx.cs 文件中是我们执行所有繁重工作的地方。此文件及其 Handler.aspx 文件应放置在您网站上可访问的某个位置。
以下是代码片段,您可以将其粘贴到 Handler.aspx.cs 文件中。
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
public partial class Customer_Handler : System.Web.UI.Page
private String pCallback = "";
private String pOP= "";
private String pUserName = "";
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (!String.IsNullOrEmpty(Request.QueryString["callback"])) { pCallback = Request.QueryString["callback"]; }
if (!String.IsNullOrEmpty(Request.QueryString["op"])) { pOP = Request.QueryString["op"]; }
if (!String.IsNullOrEmpty(Request.QueryString["username"])) { pUserName = Request.QueryString["username"]; }
switch (Request.HttpMethod)
{
case "GET":
doGET_Function();
break;
case "POST":
doPOST_function();
break;
default:
break;
}
}
}
基于 ajax 类型,我们可以使用上述 switch 语句处理 POST 或 GET 方法。然后基于变量“op”,我们可以使用 GET 和 POST 函数处理程序中的以下 switch 语句进一步扩展我们的功能。
private void doGET_Functions()
{
String R = "";
Response.Clear();
Response.ContentType = "text/plain";
// Each function needs to return a valid JSON String...
switch (pOP.ToLower())
{
case "getcustomer":
R = doGET_Customer(pUserName);
break;
//etc...
default:
R = "{\"status\":\"FAILED\", \"statusText\":\"No OP CMD Given...\"}";
break;
}
if (!String.IsNullOrEmpty(pCallback)) { R = pCallback + "(" + R + ")"; }
Response.Write(R);
}
private void doPOST_functions()
{
String R = "";
Response.Clear();
Response.ContentType = "text/plain";
// Each function needs to return a vaild JSON String...
switch (pOP.ToLower())
{
case "addcustomer":
// Save New Customer ..
//R = doAdd_Customer();
break;
//etc...
default:
R = "{\"status\":\"FAILED\", \"statusText\":\"No OP CMD Given...\"}";
break;
}
if (!String.IsNullOrEmpty(pCallback)) { R = pCallback + "(" + R + ")"; }
Response.Write(R);
}
在您的 Get_Customer 函数中,您需要根据传递的用户名进行所需的任何查找。请务必返回有效的 json 字符串值。这是一个非常好的 json 解析器,您可以使用它来帮助调试您的 json 字符串Online JSON Parser 请记住,这将位于您的网站上。
private String doGET_Customer(String iUsername){
String R = "";
String secret = "";
// do lookup and set the variable secret ...
R += "{\"status\":\"OK\", \"password\":\""+ secret +"\"}";
return R;
}
现在,当我们在 Phonegap 项目中从我们的 javascript 调用 ajax 函数时,我们可以使用这些方法与 Web 服务器上的服务(WebForm)进行通信......
<script type="text/javascript">
function calling() {
var user = $('#username').val();
$.ajax({
type: 'GET',
url: "http://www.mydomain.com/handler.aspx",
data: {
op: "GetCustomer",
username: user
}
dataType: "jsonp",
timeout: 20000,
async: false,
success: function (json) {
alert(json.status);
if (json.status == 'OK'){
console.log(json.password);
$('#myplace').html("your passowrd is " + json.password);
} else {
$('#myplace').html("The status is " + json.status + " with msg= " + json.statusText);
}
},
error: function (e) {
alert("failure: "+e.message);
console.log("failure: "+e.message);
}
});
}
</script>
我可能有一些语法错误,因为我大部分都是从记忆中完成的。我已经在我的几个项目中使用了这种技术,它很好地满足了我的需求。因此,如果您对上述语法有任何问题,我会尽力帮助解决..
另外 - 仅供参考:我不建议通过不安全的 http 协议发送任何未加密的用户信息。
希望这可以帮助...