۱۳۸۸/۰۸/۱۰

jQuery Ajax و نحوه صحيح ارسال مقادير به يك وب سرويس


در مورد كار با jQuery Ajax و نحوه فراخواني يك متد وب سرويس توسط آن، چند مطلب پيشتر ارائه شدند:
بررسي وجود نام كاربر با استفاده از jQuery Ajax در ASP.Net
و ...

تمام اين مقالات يك ايراد مهم دارند كه امروز با آن مواجه شدم و خلاصه آن به شرح زير است:
پارامتر data متد Ajax جي‌كوئري را به صورت زير در نظر بگيريد:
data: "{'username': '" + $('#<%= TextBox1.ClientID %>').val() + "'}",
اين روش شايد با بسياري از ورودي‌ها كار كند اما يك سري از كاراكترها زمانيكه با فرمت JSON ارسال مي‌شوند بايد اصطلاحا escape شوند كه ليست آن‌ها به صورت زير است:
\b  Backspace (ascii code 08)
\f Form feed (ascii code 0C)
\n New line
\r Carriage return
\t Tab
\v Vertical tab
' Apostrophe or single quote
" Double quote
\ Backslash caracter
براي حل اين مشكل مي‌توان از اسكريپت استاندارد json2.js كه در سايت json.org معرفي شده، استفاده كرد.

ابتدا ارجاعي از اين اسكريپت بايد به صفحه اضافه شود:
<script src="js/json2.js" type="text/javascript"></script>
سپس مقدار پارامتر data را بايد به شكل زير اصلاح كرد:
 var jsonText = JSON.stringify({ username: $('#<%= TextBox1.ClientID %>').val() });
...

data: jsonText,
متد stringify تمام ملاحظات لازم را در مورد escape كاراكترهاي ياد شده و بسياري از موارد ديگر به صورت خودكار اعمال مي‌كند. همچنين از اين لحاظ كه يك ساختار داده‌اي جاوا اسكريپتي را نيز مي‌تواند به معادل متني آن تبديل كند، بسيار جالب توجه است.
به عنوان مثالي ديگر، اگر متد وب سرويس ما دو پارامتر داشت، jsonText به شكل زير در خواهد آمد:
 var jsonText = JSON.stringify({ param1: val1, param2: val2 });
لازم به ذكر است كه پشتيباني از اين متد در نگارش‌هاي آخر اكثر مرورگرهاي امروزي در جهت سازگاري با آخرين استانداردهاي مصوب جاوا اسكريپت به صورت بومي وجود دارد (از IE8 به بعد و فايرفاكس 3 و يك به بعد)، اما از آنجائيكه كاربران ممكن است هنوز از نگارش‌هاي قديمي آن‌ها استفاده كنند، كمك گرفتن از فايل json2.js ضروري به نظر مي‌رسد.

Vote on iDevCenter