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

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

ScriptExecution Failed

کد خطا

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 اگر از کاراکترهای غیرقانونی در یک تابع URI استفاده کنید، خطای URIE پرتاب می شود.

خطای محدوده

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

به عنوان مثال، این خطا در شرایط زیر پرتاب می شود:

  1. اگر از تاریخ نامعتبری مانند 31 سپتامبر 2018 با برخی از API های Date استفاده می کنید.
  2. اگر مقدار نامعتبری را به متدهای عددی مانند Number.toPrecision() ، Number.tofixed() یا Number.toExponential() ارسال کنید. به عنوان مثال، فرض کنید یک مقدار بزرگ مانند 400 یا 500 را در متد 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"
        }
    }
}

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

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

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

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

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

    ParseDate.js

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

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

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

قطعنامه

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

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

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

مثال 2: شماره نامعتبر به APIهای 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 ، شماره خطی که در آن خطا رخ داده است 2 و شرح خطا 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. فایل منبع جاوا اسکریپت (که در مرحله شماره 1 در بالا مشخص شده است) را بررسی کنید. اگر عدد بزرگی که به عنوان بخشی از توضیحات خطا ذکر شده است در شماره خط خاص استفاده شود، این دلیل خطا است.

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

    SetNumberPrecision.js

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

    در این مثال، توجه کنید که در خط شماره 2 از مقدار بزرگ 400 استفاده شده است. از آنجایی که نمی توانید دقت را روی این تعداد ارقام تنظیم کنید، با خطای زیر مواجه می شوید:

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

قطعنامه

اطمینان حاصل کنید که عدد مورد استفاده در متد toPrecision() در مجموعه مقادیر مجاز قرار دارد.

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

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

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

خطای نحوی

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

به عنوان مثال، اگر بار 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. خط شماره 2 را در فایل منبع جاوا اسکریپت (که در مرحله شماره 1 در بالا مشخص شده است) بررسی کنید و بررسی کنید که چه عملیاتی در حال انجام است. اگر یک تابع 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 <city>Bangalore</city> منتقل می‌شود. JSON.parse API انتظار دارد که یک 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"
        }
    }
}

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

اگر بخواهید تابعی را روی یک شی پشتیبانی نشده فراخوانی کنید، این خطا را دریافت می کنید. برای مثال، اگر بخواهید تابع 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() را روی یک شی که مقدار عددی آن 100 است فراخوانی می کنید.

  2. فایل منبع جاوا اسکریپت را بررسی کنید و بررسی کنید که آیا تابع toUpperCase() روی یک شی که مقدار عددی آن 100 در خط شماره 2 است (در مرحله شماره 1 در بالا مشخص شده است) احضار می کنید. اگر بله، پس این دلیل خطا است.

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

    ConvertToUpperCase.js

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

    در کد جاوا اسکریپت که در بالا نشان داده شده است، number متغیر با مقدار 100 تنظیم شده است. متعاقباً 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();

مثال 2: نمی تواند ویژگی را از یک شی تعریف نشده بخواند

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

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

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

    خطا نشان می دهد که طول ویژگی را نمی توان از یک شی تعریف نشده خواند.

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

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

    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. با بررسی دقیق کد جاوا اسکریپت می توانید ببینید که در خط شماره 2، 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

اگر از کاراکترهای غیرقانونی در یک تابع 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 پاسخ خطا پیدا کنید. به عنوان مثال، در رشته خطای زیر، نام خط مشی جاوا اسکریپت 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 نادرست در خط شماره 2 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);