Combo4
今天接著回到本來要玩的 Json.NET,官網上(連結)也講得很清楚基本該怎麼用,但是沒有動手做之前,我還是覺得對 Json.NET 有點距離感。到 CodePlex 上面的 Json.NET Downloads 下載了最新的版本 Json.NET 4.5 Release 11 (source + binary) ,來動手吧!哦!另一個主角是 iframe,iframe 有什麼特別的?已經每天在用啦!
是阿,但是它有一招別人玩很久的而我還沒玩過,用 iframe 來做非同步執行的網頁。除了已經流行很久的 AJAX (Asynchronous Javascript And XMLHttpRequest),兩年前同事有說,用 iframe 做的非同步執行方式也行之有年了。今天先從 post 資料到 iframe 開始吧。
怎麼 post 資料到 iframe ?這裡有講 XD 參考後,把我昨天的 json2Test 改成這個樣子,
javascript /
function fillParameter() {
var objTest = {};
objTest.account = "lozentest";
objTest.password = "123123";
var loginConditions = document.getElementsByName("loginConditions")[0];
loginConditions.value = JSON.stringify(objTest);
}
html /<form action="http://localhost:2363/jsonNet20Test/jsonServices.ashx" target="serviceContainer" method="post">
<input name="loginConditions" type="hidden" />
<input type="submit" onclick="fillParameter();" />
</form>
<span id="result"></span>
<div>
an iframe/<br />
<iframe name="serviceContainer" src="http://localhost:2363/jsonNet20Test/jsonServices.ashx" width="100%"></iframe>
</div>
jsonServices.ashx 和兩個相關類別 /context.Response.ContentType = "text/plain";
string jsonLoginConditions = context.Request.Form["loginConditions"] ?? "";
context.Response.Write("context.Request.Form[\"loginConditions\"] = '" + jsonLoginConditions +"'");
context.Response.Write("\n\n");
if (jsonLoginConditions != "")
{
LoginConditions loginConditions = JsonConvert.DeserializeObject<LoginConditions>(jsonLoginConditions);
context.Response.Write("loginConditions.account = '" + loginConditions.account + "'");
context.Response.Write("\n");
context.Response.Write("loginConditions.password = '" + loginConditions.password + "'");
context.Response.Write("\n\n");
LoginResult loginResult = new LoginResult();
loginResult.isSuccess = false;
loginResult.errMsg = "account is invalid!";
string jsonLoginResult = JsonConvert.SerializeObject(loginResult);
context.Response.Write("jsonLoginResult = '" + jsonLoginResult + "'");
}
public class LoginConditions
{
public string account;
public string password;
}
public class LoginResult
{
public bool isSuccess;
public string errMsg;
}
最後,把我的 HTML 檔案用瀏覽器開起來,按下那顆鈕,就完成啦!
其實也沒那麼順利 ...
第一個遇到的問題就是 jsonServices.ashx 上面的 Request.Form["loginConditions"] 抓不到值!?原來是 <input id="loginConditions" type="hidden" /> 裡面要再加個 name="loginConditions" ,Request.Form 認的是 name ...(ASP.NET 寫太久,我連這最基本的規則都忘了 Qrz)
第二個遇到的問題是把 input 的 id 拿掉,只留 name 之後,用 getElementsByName("loginConditions") 抓出來的物件取不到 value 內容!?原來 getElementByName 回傳的是陣列 Qrz
大概就這樣囉。附上我的作業檔 連結,晚安~

沒有留言:
張貼留言