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

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

اجرای اسکریپت ناموفق بود

کد خطا

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"
        }
    }
}

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

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

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

خطای محدوده

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

برای مثال، این خطا تحت شرایط زیر رخ می‌دهد:

  1. اگر از تاریخ نامعتبری مانند ۳۱ سپتامبر ۲۰۱۸ با برخی از APIهای تاریخ استفاده می‌کنید.
  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. فایل منبع جاوا اسکریپت (که در مرحله ۱ بالا مشخص شد) را بررسی کنید و بررسی کنید که آیا تاریخ نامعتبری در شماره خط مشخص شده در خطا استفاده شده است یا خیر، یا اینکه متغیر استفاده شده در شماره خط دارای تاریخ نامعتبری است. اگر تاریخ نامعتبری استفاده شده باشد، علت خطا همین است.

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

    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

وضوح تصویر

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

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

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

مثال ۲: عدد نامعتبری به Precision APIها ارسال شده است

مثال بدنه پاسخ خطا

{
    "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);

خطای مرجع

خطای نوع 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. شماره خط را در فایل منبع جاوا اسکریپت بررسی کنید و بررسی کنید که آیا به متغیر تعریف نشده شناسایی شده در مرحله ۱ بالا، ارجاع داده شده است یا خیر. برای مثال، کد جاوا اسکریپت زیر به متغیر تعریف نشده price در خط ۳ ارجاع می‌دهد که با آنچه در رشته خطا وجود دارد، مطابقت دارد:

    محاسبه قیمت کل.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)\""
    

وضوح تصویر

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

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

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);

خطای نحوی

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

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

متن پاسخ خطا

{
    "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 ) که به API Proxy ارسال می‌شود، به عنوان ورودی تابع 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 زیر به API Proxy <city>Bangalore</city> ارسال می‌شود. API مربوط به JSON.parse انتظار دارد که یک JSON معتبر ارسال شود، اما از آنجا که به جای آن، یک فایل XML ارسال شده است، با خطای زیر مواجه می‌شود:

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

وضوح تصویر

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

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

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() را روی شیء‌ای که مقدار عددی آن در خط شماره ۲ برابر با ۱۰۰ است (که در مرحله ۱ بالا مشخص شده است) فراخوانی می‌کنید یا خیر. اگر بله، پس علت خطا همین است.

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

    تبدیل به حروف بزرگ.js

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

    در کد جاوا اسکریپت نشان داده شده در بالا، متغیر number با مقدار ۱۰۰ تنظیم شده است. متعاقباً تابع toUpperCase()( روی شیء number فراخوانی می‌شود. از آنجایی که تابع 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. شماره خط را در فایل منبع جاوا اسکریپت (که در مرحله ۱ بالا مشخص شد) بررسی کنید و تأیید کنید که آیا شیء مقدار معتبری دارد یا تعریف نشده است. ممکن است لازم باشد کل فایل منبع را بخوانید و بفهمید تا مشخص شود که چگونه شیء خاص تعریف یا مشتق شده است و مشخص کنید که چرا شیء تعریف نشده است. اگر متوجه شدید که شیء خاص واقعاً تعریف نشده است و سعی دارید به ویژگی length از آن دسترسی پیدا کنید، علت خطا همین است.

    برای درک بهتر این موضوع، به یک مثال توجه کنید:

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

      {
          "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 با استفاده از APIهای 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);
}

خطای آدرس اینترنتی

اگر از کاراکترهای غیرمجاز در یک تابع URI استفاده کنید، خطای نوع URIError نمایش داده می‌شود. برای مثال، اگر یک URI که دارای نماد درصد است را به توابع 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. سیاست جاوا اسکریپت، فایل منبع آن، شماره خطی که خطا در آن رخ داده و شرح خطا را شناسایی کنید. می‌توانید تمام این اطلاعات را در عنصر 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)\""
    

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

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

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

    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)\""
    

وضوح تصویر

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

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

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