>웹 프론트엔드 >JS 튜토리얼 >JavaScript는 세션 작업을 어떻게 제어합니까? 방법 소개

JavaScript는 세션 작업을 어떻게 제어합니까? 방법 소개

PHPz
PHPz앞으로
2016-05-16 17:43:343088검색

이 기사에서는 JavaScript를 사용하여 세션 작업을 제어하는 ​​방법을 소개합니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.

JavaScript는 세션 작업을 어떻게 제어합니까? 방법 소개

이 질문을 보면 어떤 사람들은 질문을 할 수도 있습니다. JavaScript는 클라이언트를 나타내고 Session은 서버를 나타냅니다(모두가 이해할 수 있을지 모르겠습니다).

먼저 요구 사항에 대해 이야기하겠습니다. 권한 관리를 할 때 특정 모듈을 클릭하면 그에 따라 세션의 모듈 코드를 변경해야 합니다. 물론 모르겠습니다. 링크 버튼을 누르면 동시에 페이지로 이동하고 세션을 수정할 수 있나요? 개인적으로 누군가 데모를 만들었다면 설명을 위한 메시지를 남길 수 있다고 생각합니다. .

태그는 페이지 이동을 구현합니다. onclick 이벤트도 이 페이지에서 js 메소드를 실행합니다. 이제 제목에 설명된 문제로 돌아가서 세션을 수정합니다.

사실 이 예는 어렵지 않지만 제게는 개인적으로 특별한 의미가 있습니다. 이 예는 AJAX에 대한 두려움을 상당 부분 덜어주었습니다.
먼저 일반 핸들러(즉, 서버 측 코드)를 작성합니다

세션을 수정하려면 추가 네임스페이스를 도입하고 인터페이스를 구현해야 합니다( 구현만 하면 되고, 그렇지 않으면 아무것도 할 필요가 없습니다)

코드는 다음과 같습니다.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.SessionState; 
namespace TGB.CJX 
{ 
/// <summary> 
/// 修改Session 
/// </summary> 
public class ModifySession : IHttpHandler,IRequiresSessionState 
{ 
public void ProcessRequest(HttpContext context) 
{ 
context.Response.ContentType = "text/plain"; 
context.Session["modelID"]=context.Request.QueryString["session"].ToString(); 
//context.Session["modelID"] = "1"; 
//context.Response.Write(context.Session["modelID"]); 
} 
public bool IsReusable 
{ 
get 
{ 
return false; 
} 
} 
} 
}

위에서 구현한 함수가 매우 간단하다는 것을 아셨나요?

클라이언트 코드는 다음과 같습니다

코드는 다음과 같습니다.

var xmlhttp; 
var session; 
function submit(obj) { 
//session = obj.id.substr(1, 1); 
session = obj.id.replace("model",""); 
//IE7,IE8,FF,MOZILLA,SAFARI 
if (window.XMLHttpRequest) { 
//alert("IE7,IE8,FF,MOZILLA,SAFARI"); 
xmlhttp = new XMLHttpRequest(); 
if (xmlhttp.overrideMinmeType) { 
xmlhttp.overrideMinmeType("text/xml"); 
} 
} else if (window.ActiveXObject) { 
//alert("IE5,IE6"); 
var activeName = ["MSXML2.XMLHTTP", "Miscrosoft.XMLHTTP"]; 
for (var i = 0; i < activeName.length; i++) { 
try { 
xmlhttp = new ActiveXObject(activeName[i]); 
break; 
} catch (e) { 
return; 
} 
} 
} 
if (xmlhttp == undefined || xmlhttp == null) { 
alert("当前浏览器不支持创建XMLHTTPREQUEST对象,请更换浏览器"); 
return; 
} 
xmlhttp.onreadystatechange = callback; 
xmlhttp.open("GET", "ModifySession.ashx?session=" + session, true); 
xmlhttp.send(null); 
} 
function callback() { 
//判断和服务器的交互是否完成,还要判断服务器端是否返回了数据 
if (xmlhttp.readyState == 4) { 
//表示和服务器端的交互完成 
if (xmlhttp.status == 200) { 
//alert("正确返回了数据"); 
return; 
} 
} 
}

콜백 함수에서는 정상 테스트를 위한 문장만 작성했습니다. 데이터 반환, 나중에 주석 처리되었습니다.
a 태그에 이벤트를 바인딩할 때 처음에는 데이터베이스에서 모듈 ID와 모듈 이름을 찾은 후 다음 명령문을 통해 명령문을 연결하는 문자열 연결 방법을 사용했습니다.

StringBuilder sbModel = new StringBuilder(); 
//将可以访问的模块进行菜单拼接 
for (int i = 0; i < dtModel.Rows.Count; i++) 
{ 
sbModel.Append("<li><a id=&#39;model" + dtModel.Rows[0]["mdlID"].ToString() + "&#39; href=&#39;SpaceWeb.aspx&#39; target=&#39;_parent&#39; runat=&#39;server&#39; onclick=&#39;submit(this)&#39;>" + dtModel.Rows[i]["mdlName"].ToString() + "</a></li>"); 
}

그런데 이렇게 작성하면 실수하기 쉽습니다. 복사하기 전에 테스트 문을 작성한 다음 쓰기 위치에 변수를 썼지만 이렇게 작성된 문은 디버그하기 어렵습니다.

다른 사람들과 소통하는 과정에서 리피터 컨트롤에 대해 이야기를 나누다가 문득 내가 반복했던 과정이 리피터 컨트롤이 한 일이라는 것을 깨달았다고요? 컨트롤이 우리를 위해 이를 수행하는데 왜 우리는 오류가 발생하기 쉬운 코드를 직접 작성해야 합니까?

<asp:Repeater runat="server" id="rptModel"> 
<ItemTemplate> 
<li><a id=&#39;model&#39;+&#39;<%#Eval("mdlID")%>&#39; href="SpaceWeb.aspx" target="_parent" runat="server" onclick="submit(this)"><%#Eval("mdlName" %></a></li> 
</ItemTemplate> 
</asp:Repeater>

예전에 문자열을 이어붙여 구현해 본 적이 있어서 이렇게 작성하면 훨씬 깔끔해지는 느낌이 들 것 같아요. 아이디를 연결할 때 문제가 발생합니다. 문제가 있으면 수정해 주세요.

지금까지 AJAX에 대한 첫 번째 기사를 작성했습니다. AJAX에 대한 이해는 시작에 불과하므로 일부 지식에 대한 설명은 아직 다소 밋밋합니다. 학습 과정에서 AJAX의 사용은 업데이트 패널 및 타이머와 같은 컨트롤에만 국한되지 않습니다. 너무 어렵지 않은 몇 가지 예는 직접 해보는 것이 좋습니다.

이 예에 관해서는 실제로 LinkButton을 사용하여 이를 달성할 수 있는데 왜 그렇게 번거로운지 물을 수 있습니다. 하지만 처음에는 LinkButton이 문제를 해결할 수 있다고 생각하지 않았다고 말하고 싶습니다. 그냥 문제를 복잡하게 만든 것 뿐이죠. 네, 페이지 이동이 필요합니다. 사실 LinkButton으로 해결할 수 있지만, AJAX에 대한 이해를 돕기 위해 제가 만든 약간의 혼란을 활용하는 것이 즐겁습니다~~

AJAX에 대한 이해는 아직 단계적으로 진행 중입니다. 틀린 부분이 있으면 댓글과 댓글을 남겨주세요

더 많은 프로그래밍 관련 지식을 보시려면 다음 사이트를 방문해 주세요. 프로그래밍 입문! !

성명:
이 기사는 jb51.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제