عیب‌یابی خطای زمان اجرای خط‌مشی جاوا اسکریپت

درحال مشاهده اسناد Apigee Edge هستید.
به اسناد Apigee X بروید.
اطلاعات

ScriptExecutionFailed

کد خطا

steps.javascript.ScriptExecutionFailed

متن پاسخ خطا

{
    "fault": {
        "faultstring": "Execution of javascript_policy_name failed with error: error_type: error_description. (javascript_source_file_name)\"",
        "detail": {
            "errorcode": "steps.javascript.ScriptExecutionFailed"
        }
    }
}

انواع خطاها و دلایل احتمالی

خط‌مشی JavaScript می‌تواند انواع مختلفی از خطاهای ScriptExecutionFailed را ایجاد کند. برخی‌از خطاهای رایج‌تر در جدول زیر فهرست شده‌اند:

نوع خطا علت
خطای محدوده اگر از عددی استفاده کنید که خارج از محدوده مقادیر قانونی باشد، RangeError پرتاب می‌شود.
خطای مرجع اگر از متغیری که تعریف نشده است استفاده کنید (ارجاع دهید)، ReferenceError ایجاد می‌شود.
خطای نحو اگر سعی کنید کدی را با خطای نحوی ارزیابی کنید، SyntaxError ایجاد می‌شود.
خطای نوع اگر از عملیاتی استفاده کنید که خارج از محدوده انواع موردانتظار باشد، TypeError ایجاد می‌شود.
خطای URI اگر از نویسه‌های غیرقانونی در تابع URI استفاده کنید، URIError ایجاد می‌شود.

خطای محدوده

وقتی روی مقداری عمل می‌کنید یا مقداری را به تابعی که در مجموعه یا محدوده مقادیر مجاز نیست ارسال می‌کنید، نوع خطای RangeError ایجاد می‌شود.

برای مثال، این خطا در شرایط زیر ایجاد می‌شود:

  1. اگر از تاریخ نامعتبر مثل ۳۱ سپتامبر ۲۰۱۸ با برخی‌از «میاناهای برنامه‌سازی کاربردی تاریخ» استفاده کنید.
  2. اگر مقدار نامعتبری را به روش‌های عددی مثل Number.toPrecision()،‏ Number.tofixed()، یا Number.toExponential() ارسال کنید. برای مثال، فرض کنید مقدار بزرگی مثل ۴۰۰ یا ۵۰۰ را در روش Number.toPrecision() ارسال کنید، خطای محدوده را خواهید دید.
  3. اگر آرایه‌ای با طول غیرقانونی ایجاد کنید.

متن پاسخ خطا

{
    "fault": {
        "faultstring": "Execution of javascript_policy_name failed with error: Javascript runtime error: \"RangeError: error_description. (javascript_source_file_name:line_number)\"",
        "detail": {
            "errorcode": "steps.javascript.ScriptExecutionFailed"
        }
    }
}

توجه: تشخیص و رفع خطاهای محدوده به پیام خطای دقیق پرتاب‌شده توسط خط‌مشی جاوا اسکریپت بستگی دارد. چند نمونه در زیر برای اطلاع شما شرح داده شده است.

مثال ۱: تاریخ نامعتبر

بدنه پاسخ خطای نمونه

{
    "fault": {
        "faultstring": "Execution of ParseDate failed with error: Javascript runtime error: \"RangeError: Date is invalid. (ParseDate.js:2)\"",
        "detail": {
            "errorcode": "steps.javascript.ScriptExecutionFailed"
        }
    }
}

تشخیص

  1. خط‌مشی جاوا اسکریپت، فایل منبع آن، شماره خطی که خطا در آن رخ داده است، و شرح خطا را شناسایی کنید. می‌توانید همه این اطلاعات را در عنصر faultstring پاسخ خطا پیدا کنید. برای مثال، در faultstring زیر، نام خط‌مشی جاوا اسکریپت ParseDate، فایل منبع جاوا اسکریپت ParseDate.js، شماره خطی که خطا در آن رخ داده است 2، و شرح خطا Date is invalid است:

    "faultstring": "Execution of ParseDate failed with error: Javascript runtime error: \"RangeError: Date is invalid. (ParseDate.js:2)\""
    
  2. فایل منبع JavaScript (شناسایی‌شده در مرحله ۱ بالا) را بررسی کنید و ببینید آیا تاریخ نامعتبری در شماره خط مشخص‌شده در خطا استفاده شده است یا متغیر استفاده‌شده در شماره خط تاریخ نامعتبری دارد. اگر از تاریخ نامعتبر استفاده شود، این دلیل خطا است.

    در اینجا نمونه‌ای از فایل منبع جاوا اسکریپت که منجر به این خطا می‌شود آورده شده است:

    ParseDate.js

    var date = new Date('2018-09-31T11:19:08.402Z');
    date.toISOString();
    

    در این مثال، متغیر date در شماره خط ۲ استفاده شده است. با بررسی فایل منبع، می‌توانید ببینید که متغیر date با تاریخ نامعتبر تنظیم شده است: 2018-09-31T11:19:08.402Z. این تاریخ نامعتبر است زیرا سپتامبر ۳۱ روز ندارد.

    توجه: قالب ISO-8601 که در این مثال استفاده شده است: YYYY-MM-DDTHH:mm:ss.sssZ

وضوح

مطمئن شوید که هنگام استفاده از «میاناهای برنامه‌سازی کاربردی تاریخ» در کد جاوا اسکریپت، همیشه از تاریخ معتبر استفاده می‌کنید.

برای اصلاح کد جاوا اسکریپت نمونه نشان‌داده‌شده در بالا، می‌توانید تاریخ را روی Sept 30 2018 تنظیم کنید، همان‌طور که در زیر نشان داده شده است:

var date = new Date('2018-09-30T11:19:08.402Z');
date.toISOString();

مثال ۲: عدد نامعتبر به «میاناهای برنامه‌سازی کاربردی» Precision ارسال شد

نمونه بدنه پاسخ خطا

{
    "fault": {
        "faultstring": "Execution of SetNumberPrecision failed with error: Javascript runtime error: "RangeError: Precision 400 out of range. (SetNumberPrecision.js:2)\"",
        "detail": {
            "errorcode": "steps.javascript.ScriptExecutionFailed"
        }
    }
}

تشخیص

  1. خط‌مشی جاوا اسکریپت، فایل منبع آن، شماره خطی که خطا در آن رخ داده است، و شرح خطا را شناسایی کنید. می‌توانید همه این اطلاعات را در عنصر faultstring پاسخ خطا پیدا کنید. برای مثال، در faultstring زیر، نام خط‌مشی جاوا اسکریپت SetNumberPrecision، فایل منبع جاوا اسکریپت SetNumberPrecision.js، شماره خطی که خطا در آن رخ داده است ۲، و شرح خطا Precision 400 out of range. است

    "faultstring": "Execution of SetNumberPrecision failed with error: Javascript runtime error: "RangeError: Precision 400 out of range. (SetNumberPrecision.js:2)\""
    
  2. فایل منبع جاوا اسکریپت (شناسایی‌شده در مرحله ۱ بالا) را بررسی کنید. اگر عدد بزرگی که به‌عنوان بخشی از شرح خطا ذکر شده است در شماره خط خاصی استفاده شده باشد، آن عدد دلیل خطا است.

    در اینجا نمونه‌ای از فایل منبع جاوا اسکریپت که منجر به این خطا می‌شود آورده شده است:

    SetNumberPrecision.js

    var number = 12.3456;
    var rounded_number = number.toPrecision(400);
    print("rounded_number = " + rounded_number);
    

    در این مثال، توجه کنید که مقدار بزرگی از ۴۰۰ در خط شماره ۲ استفاده شده است. چون نمی‌توانید دقت را روی چنین تعداد زیادی از ارقام تنظیم کنید، خطای زیر را دریافت می‌کنید:

    "faultstring": "Execution of SetNumberPrecision failed with error: Javascript runtime error: "RangeError: Precision 400 out of range. (SetNumberPrecision.js:2)\""
    

وضوح

مطمئن شوید که عدد استفاده‌شده در روش toPrecision() در مجموعه مقادیر مجاز باشد.

برای رفع مشکل جاوا اسکریپت مثال بالا، تعداد ارقام با معنی را روی ۲ تنظیم کنید که معتبر است:

var number = 12.3456;
var rounded_number = number.toPrecision(2);
print("rounded_number = " + rounded_number);

خطای مرجع

وقتی متغیر تعریف‌نشده‌ای در JavaScript شما استفاده (ارجاع) یا روی آن عملیات انجام می‌شود، خطای نوع ReferenceError ایجاد می‌شود.

متن پاسخ خطا

{
    "fault": {
        "faultstring": "Execution of javascript_policy_name failed with error: Javascript runtime error: \"ReferenceError: variable_name is not defined. (javascript_source_file_name:line_number)\"",
        "detail": {
            "errorcode": "steps.javascript.ScriptExecutionFailed"
        }
    }
}

نمونه بدنه پاسخ خطا

{
    "fault": {
        "faultstring": "Execution of ComputeTotalPrice failed with error: Javascript runtime error: \"ReferenceError: \"price\" is not defined. (ComputeTotalPrice.js:3)\"",
        "detail": {
            "errorcode": "steps.javascript.ScriptExecutionFailed"
        }
    }
}

تشخیص

  1. خط‌مشی جاوا اسکریپت، فایل منبع آن، و شماره خطی را که متغیر تعریف‌نشده در آن ارجاع داده شده است شناسایی کنید. می‌توانید همه این اطلاعات را در عنصر faultstring پاسخ خطا پیدا کنید. برای مثال، در faultstring زیر، نام خط‌مشی جاوا اسکریپت ComputeTotalPrice، فایل منبع مربوطه ComputeTotalPrice.js، شماره خطی که خطا در آن رخ داده است 3، و نام متغیر تعریف‌نشده price. است

    "faultstring": "Execution of ComputeTotalPrice failed with error: Javascript runtime error: \"ReferenceError: \"price\" is not defined. (ComputeTotalPrice.js:3)\""
    
  2. شماره خط را در فایل منبع جاوا اسکریپت بررسی کنید و مطمئن شوید که متغیر تعریف‌نشده‌ای که در مرحله ۱ بالا شناسایی شده است، ارجاع داده می‌شود یا نه. برای مثال، کد JavaScript زیر در خط ۳ به متغیر تعریف‌نشده price ارجاع می‌دهد که با آنچه در faultstring است مطابقت دارد:

    ComputeTotalPrice.js

    var item = context.getVariable("request.queryparam.item");
    var quantity = context.getVariable("request.queryparam.quantity");
    var totalprice = parseInt(quantity) * parseInt(price);
    context.setVariable("TotalPrice", totalprice);
    
    
  3. بررسی کنید که آیا متغیر خاص در کد جاوا اسکریپت تعریف شده است یا خیر. اگر متغیر تعریف نشده باشد، علت خطا همین است.

    در دستورگان نمونه نشان‌داده‌شده در بالا، از متغیر price تعریف‌نشده/اعلام‌نشده استفاده شده است؛ بنابراین، خطای زیر را خواهید دید:

    "faultstring": "Execution of ComputeTotalPrice failed with error: Javascript runtime error: \"ReferenceError: \"price\" is not defined. (ComputeTotalPrice.js:3)\""
    

وضوح

مطمئن شوید که همه متغیرهای ارجاع‌شده در کد جاوا اسکریپت به‌درستی تعریف شده باشند.

برای رفع مشکل جاوااسکریپت نمونه نشان‌داده‌شده در بالا، متغیر قیمت را قبل‌از استفاده از آن تعریف کنید. برای مثال:

var item = context.getVariable("request.queryparam.item");
var quantity = context.getVariable("request.queryparam.quantity");
var price = context.getVariable("request.queryparam.price");
var totalprice = parseInt(quantity) * parseInt(price);
context.setVariable("TotalPrice", totalprice);

خطای نحو

وقتی موتور JavaScript با نشانه‌ها یا ترتیب نشانه‌هایی مواجه می‌شود که با دستور زبان زبان مطابقت ندارد، یا وقتی ورودی قالب نامعتبری به تجزیه‌کننده‌های API مثل تجزیه JSON/XML ارسال می‌شود، نوع خطای SyntaxError ایجاد می‌شود.

برای مثال، اگر پیام‌واره JSON نامعتبر یا بدساختار به‌عنوان ورودی به JSON.parse API استفاده‌شده در خط‌مشی JavaScript ارسال شود، این خطا را دریافت می‌کنید.

متن پاسخ خطا

{
    "fault": {
        "faultstring": "Execution of javascript_policy_name failed with error: Javascript runtime error: \"SyntaxError: error_description. (javascript_source_file_name:line_number)\"",
        "detail": {
            "errorcode": "steps.javascript.ScriptExecutionFailed"
        }
    }
}

نمونه بدنه پاسخ خطا

{
    "fault": {
        "faultstring": "Execution of ParseJSONRequest failed with error: Javascript runtime error: \"SyntaxError: Unexpected token: <. (ParseJSONRequest.js:2)\"",
        "detail": {
            "errorcode": "steps.javascript.ScriptExecutionFailed"
        }
    }
}

تشخیص

  1. خط‌مشی جاوا اسکریپت، فایل منبع آن، شماره خطی که خطا در آن رخ داده است، و شرح خطا را شناسایی کنید. می‌توانید همه این اطلاعات را در عنصر faultstring پاسخ خطا پیدا کنید. برای مثال، در faultstring زیر، نام خط‌مشی جاوا اسکریپت ParseJSONRequest، فایل منبع جاوا اسکریپت ParseJSONRequest.js، شماره خطی که خطا در آن رخ داده است 2، و شرح خطا Unexpected token است:

    "faultstring": "Execution of ParseJSONRequest failed with error: Javascript runtime error: \"SyntaxError: Unexpected token: <. (ParseJSONRequest.js:2)\""
    
  2. شماره خط ۲ را در فایل منبع جاوا اسکریپت (که در مرحله ۱ بالا شناسایی شده است) بررسی کنید و ببینید چه عملیاتی درحال انجام است. اگر تابع JSON.parse() درحال اجرا است، پارامتر ورودی ارسال‌شده به آن را بررسی کنید. اگر پارامتر ورودی معتبر نباشد یا JSON آن قالب‌بندی نادرست داشته باشد، این دلیل خطا است.

    در اینجا نمونه‌ای از کد جاوا اسکریپت که منجر به این خطا می‌شود آورده شده است:

    var input = context.getVariable("request.content");
    var result = JSON.parse(input);
    

    در این مثال، بار درخواست (request.content) که به «پراکسی میانای برنامه‌سازی کاربردی» ارسال شده است به‌عنوان ورودی تابع JSON.parse() استفاده می‌شود.

    در اینجا نمونه‌ای از فراخوانی API آورده شده است که نشان می‌دهد درخواست چگونه ارسال شده است:

    curl -v "http://<org>-<env>.apigee.net/v1/js-demo" -H "Content-Type: application/json" -X POST -d '<city>Bangalore</city>'
    

    در درخواست بالا، بار XML زیر به «پراکسی میانای برنامه‌سازی کاربردی» <city>Bangalore</city> ارسال می‌شود. «میانای برنامه‌سازی کاربردی» JSON.parse انتظار دارد JSON معتبری ارسال شود اما چون به‌جای آن پایه‌بار XML ارسال شده است، با خطای زیر ناموفق می‌شود:

    "Execution of ParseJSONRequest failed with error: Javascript runtime error: \"SyntaxError: Unexpected token: <. (ParseJSONRequest.js:2)\""
    

وضوح

حتماً ورودی معتبری را به میاناهای برنامه‌سازی کاربردی تجزیه که در کد جاوا اسکریپت استفاده می‌شود ارسال کنید.

برای رفع مشکل خط‌مشی نمونه که در بالا بحث شد، درخواست پایه‌بار JSON معتبری را به‌صورت زیر ارسال کنید:

curl -v "http://<org>-<env>.apigee.net/v1/js-demo" -H "Content-Type: application/json" -X POST -d '{"city" : "Bangalore"}'

خطای نوع

نوع خطای TypeError زمانی ایجاد می‌شود که:

  • عملوند یا آرگومان ارسال‌شده به تابع با نوع موردانتظار آن عملگر یا تابع سازگار نیست.
  • تابعی روی شیء تهی، تعریف‌نشده، یا اشتباه فراخوانده می‌شود.
  • دارایی از شیء تهی، تعریف‌نشده، یا اشتباهی قابل‌دسترسی است.

برای مثال، خطای نوعی ایجاد می‌شود:

  • اگر سعی کنید تابع toUpperCase() را روی یک عدد فراخوانی کنید. به‌دلیل اینکه تابع toUpperCase() فقط روی اشیای رشته‌ای قابل‌فراخوانی است.
  • اگر سعی کنید دارایی را از یک شیء تهی یا تعریف‌نشده بخوانید.

متن پاسخ خطا

{
    "fault": {
        "faultstring": "Execution of javascript_policy_name failed with error: Javascript runtime error: \"TypeError: error_description. (javascript_source_file_name:line_number)\"",
        "detail": {
            "errorcode": "steps.javascript.ScriptExecutionFailed"
        }
    }
}

مثال ۱: فراخوانی تابع روی شیء اشتباه

اگر بخواهید تابعی را روی شیء پشتیبانی‌نشده‌ای فراخوانی کنید، این خطا را دریافت می‌کنید. برای مثال، اگر بخواهید تابع toUpperCase() را روی شماره‌ای که دریافت می‌کنید فراخوانی کنید، با خطا مواجه می‌شوید. به این دلیل است که تابع toUpperCase() فقط روی اشیا رشته‌ای قابل‌فراخوانی است.

نمونه بدنه پاسخ خطا

{
    "fault": {
        "faultstring": "Execution of ConvertToUpperCase failed with error: Javascript runtime error: \"TypeError: Cannot find function toUpperCase in object 100. (ConvertToUpperCase.js:2)\"",
        "detail": {
            "errorcode": "steps.javascript.ScriptExecutionFailed"
        }
    }
}

تشخیص

  1. خط‌مشی جاوا اسکریپت، فایل منبع آن، شماره خطی که خطا در آن رخ داده است، و شرح خطا را شناسایی کنید. می‌توانید همه این اطلاعات را در عنصر faultstring پاسخ خطا پیدا کنید. برای مثال، در faultstring زیر، نام خط‌مشی جاوا اسکریپت ConvertToUpperCase، فایل منبع ConvertToUpperCase.js، شماره خط 2، و شرح خطا **Cannot find function toUpperCase in object 100. است

    "faultstring": "Execution of ConvertToUpperCase failed with error: Javascript runtime error: \"TypeError: Cannot find function toUpperCase in object 100. (ConvertToUpperCase.js:2)\""
    

    شرح خطا نشان می‌دهد که تابع toUpperCase() را روی شیئی که مقدار عددی آن ۱۰۰ است فراخوانی می‌کنید.

  2. فایل منبع جاوا اسکریپت را بررسی کنید و ببینید آیا تابع toUpperCase() را در شیئی که مقدار عددی آن در خط شماره ۲ (که در مرحله ۱ در بالا شناسایی شده است) برابر با ۱۰۰ است فراخوانی می‌کنید یا نه. اگر پاسخ مثبت است، این دلیل خطا است.

    در اینجا نمونه‌ای از فایل منبع جاوا اسکریپت که منجر به این خطا می‌شود آورده شده است:

    ConvertToUpperCase.js

    var number = 100;
    var result = number.toUpperCase();
    

    در کد جاوا اسکریپت نشان‌داده‌شده در بالا، متغیر number با مقدار ۱۰۰ تنظیم شده است. سپس تابع toUpperCase()( روی شیء عدد فراخوانده می‌شود. ازآنجایی‌که تابع toUpperCase() فقط روی اشیای رشته‌ای قابل‌فراخوانی است، با این خطا مواجه می‌شوید:

    "Execution of ConvertToUpperCase failed with error: Javascript runtime error: \"TypeError: Cannot find function toUpperCase in object 100. (ConvertToUpperCase.js:2)\""
    

وضوح

همیشه از توابعی مثل toUpperCase() در اشیای معتبر استفاده کنید.

برای اصلاح کردن مثال نشان‌داده‌شده در بالا، می‌توانید متغیر رشته‌ای ایجاد کنید و سپس تابع toUpperCase() را در رشته‌ای فراخوانی کنید:

var text = "Hello Apigee !";
var result = text.toUpperCase();

مثال ۲: نمی‌توان دارایی را از شیء تعریف‌نشده خواند

اگر سعی کنید از یک شیء تعریف‌نشده به دارایی دسترسی پیدا کنید/آن را بخوانید، این خطا را دریافت می‌کنید. برای مثال، این خطا می‌تواند زمانی رخ دهد که سعی می‌کنید به داده‌های شیئی در آرایه دسترسی پیدا کنید، اما شیء تعریف‌نشده است. توضیحات کامل را در زیر ببینید.

نمونه بدنه پاسخ خطا

{
    "fault": {
        "faultstring": "Execution of ParseJSONResponse failed with error: Javascript runtime error: \"TypeError: Cannot read property \"length\" from undefined. (ParseJSONResponse.js:7)\"",
        "detail": {
            "errorcode": "steps.javascript.ScriptExecutionFailed"
        }
    }
}

تشخیص

  1. خط‌مشی جاوا اسکریپت، فایل منبع آن، شماره خطی که خطا در آن رخ داده است، و شرح خطا را شناسایی کنید. می‌توانید همه این اطلاعات را در عنصر faultstring پاسخ خطا پیدا کنید. برای مثال، در faultstring زیر، نام خط‌مشی ParseJSONResponse، فایل منبع ParseJSONResponse.js، شماره خط 6، و شرح خطا Cannot read property "length" from undefined است.

    "faultstring": "Execution of ParseJSONResponse failed with error: Javascript runtime error: \"TypeError: Cannot read property \"length\" from undefined. (ParseJSONResponse.js:6)\""
    

    این خطا نشان می‌دهد که دارایی length را نمی‌توان از یک شیء تعریف‌نشده خواند.

  2. شماره خط در فایل منبع جاوا اسکریپت (شناسایی‌شده در مرحله ۱ بالا) را بررسی کنید و مطمئن شوید که شیء مقدار معتبری دارد یا تعریف‌نشده است. ممکن است لازم باشد فایل منبع کامل را بخوانید و درک کنید تا نحوه تعریف یا استخراج آن شیء خاص را تعیین کنید و دلیل نامشخص بودن آن شیء را مشخص کنید. اگر متوجه شدید که آن شیء خاص واقعاً تعریف‌نشده است و می‌خواهید از آن به دارایی طول دسترسی پیدا کنید، این دلیل خطا است.

    بیایید به یک مثال نگاه کنیم تا این مشکل را بهتر درک کنیم:

    1. فرض کنید پاسخ JSON زیر را از سرور پشتیبان دریافت می‌کنید:

      {
          "cars": [
             { "name":"Toyota", "count": 150 }
             { "name":"Honda", "count": 100 },
             { "name":"Ford", "count": 75 }
          ]
      }
      
    2. در اینجا یک فایل منبع جاوا اسکریپت نمونه وجود دارد که این پاسخ JSON را تجزیه می‌کند و به خطای ذکرشده در بالا منجر می‌شود:

      ParseJSONResponse.js

      // Get the JSON response
      var jsonData = context.getVariable("response.content");
      print (jsonData);
      
      // Read the cars array
      for (var i = 0; i < jsonData.cars.length; i++)
        {
        print("name = " + jsonData.cars[i].name);
        print("count = " + jsonData.cars[i].count);
        }
      
    3. با بررسی دقیق کد جاوا اسکریپت می‌توانید ببینید که در خط شماره ۲، response.contentبه‌صورت رشته معمولی (در گیومه) در متغیر jsonData خوانده/ذخیره می‌شود.

    4. چون jsonData یک رشته معمولی است، وقتی تلاش می‌کنید از jsonData به cars دسترسی پیدا کنید (jsonData.cars) تعریف‌نشده خواهد بود.

    5. درنتیجه، وقتی تلاش می‌کنید دارایی length را از jsonData.cars بخوانید، که تعریف‌نشده است، این خطا را دریافت می‌کنید:

      "faultstring": "Execution of ParseJSONResponse failed with error: Javascript runtime error: \"TypeError: Cannot read property \"length\" from undefined. (ParseJSONResponse.js:6)\""
      

وضوح

مطمئن شوید که همیشه داده‌های JSON را به‌عنوان شیء JSON بااستفاده از «میاناهای برنامه‌سازی کاربردی JSON» مربوطه می‌خوانید.

برای اصلاح کردن جاوا اسکریپت نمونه که در بالا توضیح داده شد، می‌توانید از تابع JSON.parse() در شیء response.content استفاده کنید تا آن را به‌صورت شیء JSON دریافت کنید. پس‌از این، می‌توانید به آرایه cars دسترسی پیدا کنید و باموفقیت در آرایه پیمایش کنید.

// Get the JSON response
var data = context.getVariable("response.content");
var jsonData = JSON.parse(data);
print (jsonData);

// Read the cars array
for (var i = 0; i < jsonData.cars.length; i++)
{
    print("name = " + jsonData.cars[i].name);
    print("count = " + jsonData.cars[i].count);
}

خطای نشانی وب

اگر از نویسه‌های غیرقانونی در تابع نشانی وب استفاده کنید، نوع خطای URIError ایجاد می‌شود. برای مثال، اگر نشانی وب با نماد درصد را به تابع decodeURI یا decodeURIComponent ارسال کنید، این خطا را دریافت خواهید کرد.

متن پاسخ خطا

{
    "fault": {
        "faultstring": "Execution of javascript_policy_name failed with error: Javascript runtime error: \"URIError: error_description. (javascript_source_file_name:line_number)\"",
        "detail": {
            "errorcode": "steps.javascript.ScriptExecutionFailed"
        }
    }
}

نمونه بدنه پاسخ خطا

{
    "fault": {
        "faultstring": "Execution of URIDecode failed with error: Javascript runtime error: \"URIError: Malformed URI sequence. (URIDecode.js:2)\"",
        "detail": {
            "errorcode": "steps.javascript.ScriptExecutionFailed"
        }
    }
}

تشخیص

  1. خط‌مشی JavaScript، فایل منبع آن، شماره خطی که خطا در آن رخ داده است، و شرح خطا را شناسایی کنید. می‌توانید همه این اطلاعات را در عنصر faultstring پاسخ خطا پیدا کنید. برای مثال، در faultstring زیر، نام خط‌مشی جاوا اسکریپت URIDecode</code، فایل منبع جاوا اسکریپت URIDecode.js، شماره خط 2، و شرح خطا Malformed URI sequence است:

    "faultstring": "Execution of URIDecode failed with error: Javascript runtime error: \"URIError: Malformed URI sequence. (URIDecode.js:2)\""
    

    شرح خطا نشان می‌دهد که در خط شماره ۲ از URIDecode.js از توالی URI بدشکل استفاده شده است.

  2. فایل منبع جاوا اسکریپت را بررسی کنید و مطمئن شوید که آرگومان ارسال‌شده به هریک از توابع نشانی وب حاوی نویسه‌های غیرقانونی نباشد. اگر پاسخ مثبت است، این دلیل خطا است.

    در اینجا نمونه‌ای از فایل منبع جاوا اسکریپت که منجر به این خطا می‌شود آورده شده است:

    URIDecode.js

    var str = "75%-Completed";
    var decoded_str = decodeURIComponent(str);
    context.setVariable("decoded_str", decoded_str);
    

    در کد جاوا اسکریپت نشان‌داده‌شده در بالا، متغیر str که به decodeURIComponent() ارسال شده است نماد درصد دارد که نویسه‌ای غیرقانونی درنظر گرفته می‌شود؛ بنابراین، این خطا را دریافت می‌کنید:

    "Execution of URIDecode failed with error: Javascript runtime error: \"URIError: Malformed URI sequence. (URIDecode.js:2)\""
    

وضوح

مطمئن شوید که همه نویسه‌های استفاده‌شده در توابع «نشانی وب» قانونی و مجاز باشند.

برای رفع مشکل جاوا اسکریپت مثال بالا، از کدبندی نماد درصد استفاده کنید. برای مثال، %25:

var str = "75%25-Completed";
var decoded_str = decodeURIComponent(str);
context.setVariable("decoded_str", decoded_str);