>웹 프론트엔드 >JS 튜토리얼 >Handler_jquery를 통해 외부 XML 데이터에 액세스하는 JQuery Ajax 코드

Handler_jquery를 통해 외부 XML 데이터에 액세스하는 JQuery Ajax 코드

WBOY
WBOY원래의
2016-05-16 18:25:55811검색

JQuery를 사용하는 것은 매우 간단합니다. 공식 웹사이트에서 스크립트 파일을 다운로드하고 페이지에서 참조하면 됩니다. 그러면 스크립트 코드에서 JQuery가 제공하는 개체와 기능을 사용할 수 있습니다.
Ajax 메서드를 사용하여 JQuery에서 서버 리소스를 비동기적으로 얻는 것은 매우 간단합니다. 독자는 공식 웹사이트 http://api.jquery.com/category/ajax/에서 제공되는 예제를 참조할 수 있습니다. 물론 클라이언트 스크립트로서 JQuery는 리소스에 대한 도메인 간 액세스 문제도 직면하게 됩니다. 쉽게 말하면, 스크립트로 접근하는 리소스는 웹사이트 외부의 리소스에 속하며, 스크립트의 위치와 리소스의 위치는 동일한 영역에 있지 않습니다. 기본적으로 브라우저는 리소스에 대한 직접적인 도메인 간 액세스를 허용하지 않습니다. 클라이언트 브라우저에 설정이 없으면 액세스가 실패합니다. 이 경우 문제를 해결하기 위해 일반적으로 서버 측 핸들러를 사용합니다. 즉, 스크립트와 리소스 사이에 브리지를 설정하여 스크립트가 이 사이트의 핸들러에 액세스하고 핸들러를 통해 외부 리소스에 액세스할 수 있도록 허용합니다. 이것은 매우 일반적인 방법이고 조작도 매우 간단하므로 자주 사용할 것이므로 나중에 사용할 수 있도록 여기에 기록하겠습니다!
먼저 웹사이트에서 처리기를 만들고 Visual Studio에서 새 일반 처리기 파일을 만든 후 다음 코드를 복사해야 합니다.

코드 복사 코드는 다음과 같습니다.

<%@ WebHandler Language="C#" Class="WebApplication1.Stock" %>
네임스페이스 WebApplication1
{
시스템 사용;
System.IO 사용;
System.Net 사용;
System.Text 사용;
System.Web 사용;
System.Collections.Generic 사용;
System.Linq 사용;
/// <요약>
/// 외부 XML 소스를 렌더링하기 위한 비동기 HTTP 핸들러.
///
공용 클래스 Stock : System.Web.IHttpAsyncHandler
{
private static readonly SafeList safeList = new SafeList();
비공개 HttpContext 컨텍스트;
비공개 WebRequest 요청;
/// <요약>
/// HTTP 핸들러가 재사용 가능한지 여부를 나타내는 값을 가져옵니다.
///
public bool IsReusable
{
get { return false; }
}
/// <요약>
/// 비동기 HTTP 요청을 하기 전에 외부 RSS 피드가 허용 목록의 서버에 의해 호스팅되는지
/// 확인하세요.
///
공용 IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData)
{
var u = context.Request.QueryString["u"];
var uri = 새로운 Uri(u);
if (safeList.IsSafe(uri.DnsSafeHost))
{
this.context = context;
this.request = HttpWebRequest.Create(uri);
return this.request.BeginGetResponse(cb, extraData);
}
else
{
throw new HttpException(204, "No content");
}
}
///
/// RSS 피드에 대한 비동기 HTTP 요청의 응답을 렌더링합니다.
/// 캐싱 시 응답의 Expires 및 Last-Modified 헤더를 사용합니다.
///
public void EndProcessRequest(IAsyncResult 결과)
{
stringexpiresHeader;
string lastModifiedHeader;
문자열 RSS;
(var response = this.request.EndGetResponse(result)) 사용
{
expiresHeader = response.Headers["Expires"];
lastModifiedHeader = response.Headers["Last-Modified"];
(var stream = response.GetResponseStream()) 사용
(var reader = new StreamReader(stream, true)) 사용
{
rss = reader.ReadToEnd();
}
}
var 출력 = this.context.Response;
output.ContentEncoding = Encoding.UTF8;
output.ContentType = "텍스트/xml;"; // "application/rss xml; charset=utf-8";
출력.쓰기(rss);
var 캐시 = 출력.캐시;
cache.VaryByParams["u"] = true;
DateTime이 만료되었습니다.
var hasExpires = DateTime.TryParse(expiresHeader, 만료 만료);
마지막 수정된 날짜/시간;
var hasLastModified = DateTime.TryParse(lastModifiedHeader, out lastModified);
cache.SetCacheability(HttpCacheability.Public);
cache.SetOmitVaryStar(true);
cache.SetSlidingExpiration(false);
cache.SetValidUntilExpires(true);
DateTimeexpiredBy = DateTime.Now.AddHours(1);
if (hasExpires &&expires.CompareTo(expireBy) <= 0)
{
cache.SetExpires(expires);
}
else
{
cache.SetExpires(expireBy);
}
if (hasLastModified)
{
cache.SetLastModified(lastModified);
}
}
///
/// 요청을 동기적으로 처리하지 마세요.
///
public void ProcessRequest(HttpContext context)
{
throw new InvalidOperationException();
}
}
///
/// 호스트 이름을 안전한 호스트 목록과 일치시키는 방법.
///
공개 클래스 SafeList
{
///
/// 하드코딩된 안전한 호스트 목록입니다.
///
비공개 정적 읽기 전용 IEnumerable 호스트 이름 = 새 문자열[]
{
"cnblogs.com",
"msn.com",
"163.com",
"csdn.com"
};
/// <요약>
/// 각 안전한 호스트 이름 앞에 마침표를 붙입니다.
///
비공개 정적 읽기 전용 IEnumerable dottedHostnames =
호스트 이름의 호스트 이름
select string.Concat(".", 호스트 이름);
/// <요약>
/// 안전한 호스트 목록의
/// 호스트 이름과 정확히 일치하거나
/// 호스트 이름으로 끝납니다.
///
/// 테스트할 호스트 이름
/// 호스트 이름이 일치하면 True
public bool IsSafe(문자열 호스트 이름)
{
return MatchesHostname(호스트 이름) || MatchesDottedHostname(호스트 이름); }
/// <요약>
///
/// 안전한 호스트 목록의 호스트 이름으로 끝납니다.
///
/// 테스트할 호스트 이름
/// 호스트 이름이 일치하면 True
private static bool MatchesDottedHostname(문자열 호스트 이름)
{
return dottedHostnames.Any(host => 호스트 이름.EndsWith(host, StringComparison.InvariantCultureIgnoreCase));
}
/// <요약>
/// 안전한 호스트 목록의 호스트 이름
///과 정확히 일치합니다.
///
/// 테스트할 호스트 이름
/// 호스트 이름이 일치하면 True
private static bool MatchesHostname(문자열 호스트 이름)
{
return 호스트 이름.Contains(호스트 이름, StringComparer.InvariantCultureIgnoreCase);
}
}
}

저는 Ajax에 대해 잘 알고 있습니다. :// Money.service.msn.com/StockQuotes.aspx?symbols=msft,我们在页face上这样使用 JQuery api 통过Handler来访问数据:
复代代码 代码如下:



<머리>
<제목>


<본문>

로드 중...






하면是实现적结果:
이름:25.8 높음:67,502,221 낮음:$226,107,039,514
  Handler的写法基本本大同小异,因此可以写成一个以后如遇到에서 일반적으로 사용되는 사례脚本中需要跨域访问资源时便可以直接使用!代码记录于此,方便查阅。
성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.