۱۳۸۷/۱۱/۰۸

پردازش فايل‌هاي XML با استفاده از jQuery


فرض كنيد مثال دريافت اطلاعات API فيدبرنر را بخواهيم با استفاده از jQuery پياده سازي كنيم، يعني امكان برنامه نويسي سمت سرور را نداريم و مي‌خواهيم با استفاده از جاوا اسكريپت، تعداد مشتركين فيد يك سايت را نمايش دهيم.
براي مثال آدرس دريافت اطلاعات مربوط به API فيدبرنر وبلاگ جاري به صورت زير است:

و در حالت كلي :
http://api.feedburner.com/awareness/1.0/GetFeedData?uri=<feeduri>

كه حاصل آن براي مثال يك فايل XML با فرمت زير مي‌باشد:

<rsp stat="ok">
<feed id="fhphjt61bueu08k93ehujpu234" uri="vahidnasiri">
<entry date="2009-01-23" circulation="153" hits="276" reach="10"/>
</feed>
</rsp>

همانطور كه مطلع هستيد چند روزي است كه jQuery 1.3.1 ارائه شده است. جهت استفاده از آخرين نگارش موجود آن تا اين زمان، مي‌توان از گوگل به عنوان هاست اين كتابخانه به صورت زير استفاده كرد:

<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js' type='text/javascript'></script>

نحوه خواندن مقدار circulation فايل xml ذخيره شده بر روي كامپيوتر:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>FeedBurner API</title>
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js' type='text/javascript'>
</script>
<script type="text/javascript">
function parseXml(xml){
//find every entry and print the circulation
$(xml).find("entry").each(function(){
$("#output").append($(this).attr("circulation"));
});
}

$(document).ready(function(){
$.ajax({
type: "GET",
url: "GetFeedData_local.xml",
dataType: "xml",
success: parseXml
});
});
</script>
</head>
<body>
<div dir="rtl" style="font-family:tahoma; font-size:12px;">
تعداد مشتركين تغذيه خبري سايت:
<div id="output">
</div>
</div>
</body>
</html>

با استفاده از قابليت Ajax كتابخانه jQuery ، اطلاعات فايل محلي GetFeedData_local.xml دريافت شده و محتواي آن به تابع parseXml پاس مي‌شود (توسط قسمت success). سپس در اين تابع تمام تگ‌هاي entry يافت شده و مقدار circulation آن‌ها به يك div با ID معادل output اضافه مي‌شود.
مثال فوق در مورد خواندن اطلاعات از يك فايل xml مي‌تواند براي مثال اين كاربرد را در يك سايت داشته باشد:
نمايش اتفاقي سخن روز يا سخن بزرگان و امثال آن بدون برنامه نويسي سمت سرور جهت انجام اين كار از يك فايل xml تهيه شده، بدون نياز به استفاده از ديتابيس خاصي.

تا اينجاي كار مشكلي نيست. اما همانطور كه در مطلب مقابله با حملات CSRF نيز ذكر شد، مرورگرهاي جديد امكان ارسال يا دريافت اطلاعات به صورت Ajax را بين سايت‌ها ممنوع كرده‌اند (ماجرا هم از آنجا شروع شد كه يكبار جي‌ميل اين باگ امنيتي را داشته است). بنابراين اگر شما بجاي url قسمت Ajax فوق، آدرس سايت فيد برنر را قرار دهيد با خطاي زير متوقف خواهيد شد:

Access to restricted URI denied

تمام موارد ديگري هم كه در jQuery براي دريافت اطلاعات از يك فايل يا url موجود است (مثلا تابع load يا get و امثال آن) فقط به سايت جاري و دومين جاري بايد ختم شوند در غير اينصورت توسط مرورگرهاي جديد متوقف خواهند شد.