פתרון בעיות בזמן ריצה של מדיניות JavaScript

מוצג המסמך של 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. אם משתמשים בתאריך לא חוקי, כמו 31 בספטמבר 2018, בחלק מממשקי ה-API של תאריך.
  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"
        }
    }
}

הערה:האבחון והפתרון של שגיאות טווח תלויים בהודעת השגיאה המדויקת שמוצגת על ידי מדיניות JavaScript. הנה שתי דוגמאות לעיונכם.

דוגמה 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. מאתרים את המדיניות בנושא JavaScript, את קובץ המקור שלה, את מספר השורה שבה אירעה השגיאה ואת תיאור השגיאה. כל המידע הזה מופיע ברכיב faultstring בתגובת השגיאה. לדוגמה, ב-faultstring הבא, השם של מדיניות JavaScript הוא ParseDate, קובץ המקור של JavaScript הוא 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 (שזוהה בשלב 1 למעלה) ובודקים אם נעשה שימוש בתאריך לא חוקי במספר השורה שצוין בשגיאה, או אם למשתנה שבו נעשה שימוש במספר השורה יש תאריך לא חוקי. אם נעשה שימוש בתאריך לא חוקי, זו הסיבה לשגיאה.

    זו דוגמה לקובץ מקור של JavaScript שמוביל לשגיאה הזו:

    ParseDate.js

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

    בדוגמה הזו, יש משתנה date שנמצא בשורה מספר 2. בודקים את קובץ המקור ורואים שהמשתנה date מוגדר עם תאריך לא חוקי: 2018-09-31T11:19:08.402Z. התאריך הזה לא חוקי כי בספטמבר יש 30 ימים.

    הערה: הפורמט ISO-8601 בדוגמה הזו הוא: YYYY-MM-DDTHH:mm:ss.sssZ

רזולוציה

הקפידו להשתמש תמיד בתאריך חוקי כשמשתמשים בממשקי API של תאריך בקוד ה-JavaScript.

כדי לתקן את קוד JavaScript לדוגמה שמוצג למעלה, אפשר להגדיר את התאריך כ-Sept 30 2018 כמו שמוצג כאן:

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

דוגמה 2: מספר לא חוקי שהוענק לממשקי 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. מאתרים את המדיניות בנושא JavaScript, את קובץ המקור שלה, את מספר השורה שבה אירעה השגיאה ואת תיאור השגיאה. כל המידע הזה מופיע ברכיב faultstring בתגובת השגיאה. לדוגמה, ב-faultstring הבא, שם מדיניות JavaScript הוא SetNumberPrecision, קובץ המקור של JavaScript הוא 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. בודקים את קובץ המקור של JavaScript (שזוהה בשלב 1 למעלה). אם המספר הגדול שצוין כחלק מתיאור השגיאה משמש במספר השורה הספציפית, זו הסיבה לשגיאה.

    הנה דוגמה לקובץ מקור של JavaScript שמוביל לשגיאה הזו:

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

רזולוציה

חשוב לוודא שהמספר שנעשה בו שימוש ב-method toPrecision() נמצא בטווח הערכים המותרים.

כדי לפתור את הבעיה בקוד ה-JavaScript לדוגמה שתואר למעלה, הגדירו את מספר הספרות המשמעותיות ל-2 והוא תקין:

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

שגיאת הפניה

סוג השגיאה ReferenceError זורק כשמשתנה לא מוגדר ב-JavaScript נמצא בשימוש (הפניה) או מופעל עליו.

גוף התגובה לשגיאה

{
    "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. מזהים את מדיניות JavaScript, את קובץ המקור שלה ואת מספר השורה שבה יש הפניה למשתנה הלא מוגדר. כל המידע הזה מופיע ברכיב faultstring של תגובת השגיאה. לדוגמה, ב-faultstring הבא, השם של מדיניות JavaScript הוא 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 ומוודאים שיש הפניה למשתנה הלא מוגדר שזוהה בשלב 1 שלמעלה. לדוגמה, קוד ה-JavaScript הבא מפנה למשתנה הלא מוגדר price בשורה 3, התואם את מה שנמצא ב-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. בודקים אם המשתנה הספציפי מוגדר בקוד ה-JavaScript. אם המשתנה לא מוגדר, זו הסיבה לשגיאה.

    בסקריפט לדוגמה שמוצג למעלה, נעשה שימוש במשתנה price הלא מוצהר/מוגדר. לכן, תופיע השגיאה הבאה:

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

רזולוציה

מוודאים שכל המשתנים שיש אליהם הפניה בקוד ה-JavaScript מוגדרים כראוי.

כדי לפתור את הבעיה ב-JavaScript לדוגמה שלמעלה, יש להגדיר את מחיר המשתנה לפני שמשתמשים בו. לדוגמה:

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 זורק כשמנוע ה-JavaScript נתקל באסימונים או סדר אסימונים שאינו תואם לתחביר של השפה, או כאשר הקלט בפורמט מועבר לממשקי ה-API של המנתח, כמו ניתוח JSON/XML.

לדוגמה, אם עומס העבודה בפורמט JSON לא תקין או בפורמט שגוי מועבר כקלט ל-API JSON.parse שמשמש במדיניות 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. מאתרים את המדיניות בנושא JavaScript, את קובץ המקור שלה, את מספר השורה שבה אירעה השגיאה ואת תיאור השגיאה. כל המידע הזה מופיע ברכיב faultstring של תגובת השגיאה. לדוגמה, ב-faultstring הבא, שם מדיניות JavaScript הוא ParseJSONRequest, קובץ המקור של JavaScript הוא ParseJSONRequest.js, מספר השורה שבה התרחשה השגיאה הוא 2 ותיאור השגיאה הוא Unexpected token:

    "faultstring": "Execution of ParseJSONRequest failed with error: Javascript runtime error: \"SyntaxError: Unexpected token: <. (ParseJSONRequest.js:2)\""
    
  2. בודקים את שורה מספר 2 בקובץ המקור של JavaScript (שזוהה בשלב 1 למעלה) ובודקים איזו פעולה מתבצעת. אם מתבצעת הרצה של פונקציית JSON.parse(), צריך לבדוק את פרמטר הקלט שהועבר אליה. אם פרמטר הקלט לא תקין או אם הוא לא בפורמט JSON, זו הסיבה לשגיאה.

    הנה קוד JavaScript לדוגמה שמוביל לשגיאה הזו:

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

    בדוגמה הזו, המטען הייעודי (payload) של הבקשה (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>'
    

    בבקשה שלמעלה, המטען הייעודי (payload) הבא של XML מועבר לשרת ה-proxy ל-API <city>Bangalore</city> ה-API של המאפיין JSON.parse מצפה להעברת JSON תקין אבל מכיוון שמטען ייעודי (payload) של XML מועבר במקום זאת, הוא נכשל עם השגיאה הבאה:

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

רזולוציה

הקפידו להעביר קלט חוקי לממשקי ה-API לניתוח שבהם משתמשים בקוד ה-JavaScript.

כדי לפתור את הבעיה במדיניות לדוגמה שצוינה למעלה, מעבירים בקשה תקינה של מטען ייעודי (payload) בפורמט JSON באופן הבא:

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

שגיאת סוג

סוג השגיאה TypeError מופעל כאשר:

  • אופרנד או ארגומנט שמועברים לפונקציה לא תואמים לסוג שמצופה מהאופרטור או הפונקציה האלה.
  • פונקציה מופעלת באובייקט null, לא מוגדר או שגוי.
  • מתבצעת גישה למאפיין מאובייקט null, לא מוגדר או שגוי.

לדוגמה, זורקת שגיאה מסוג סוג:

  • אם מנסים להפעיל את הפונקציה toUpperCase() במספר. הדבר כי אפשר להפעיל את הפונקציה toUpperCase() רק על אובייקטים של מחרוזות.
  • אם אתם מנסים לקרוא מאפיין מאובייקט null או לא מוגדר.

גוף התגובה לשגיאה

{
    "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. מאתרים את המדיניות בנושא JavaScript, את קובץ המקור שלה, את מספר השורה שבה אירעה השגיאה ואת תיאור השגיאה. כל המידע הזה מופיע ברכיב faultstring בתגובת השגיאה. לדוגמה, ב-faultstring הבא, השם של מדיניות JavaScript הוא 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. יש לבדוק את קובץ המקור של JavaScript ולוודא שהפונקציה toUpperCase() מופעלת באובייקט שהערך המספרי שלו הוא 100 בשורה מספר 2 (מזוהה בשלב 1 למעלה). אם כן, זו הסיבה לשגיאה.

    הנה דוגמה לקובץ מקור של JavaScript שמוביל לשגיאה הזו:

    ConvertToUpperCase.js

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

    בקוד ה-JavaScript שלמעלה, המשתנה 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. מאתרים את המדיניות בנושא JavaScript, את קובץ המקור שלה, את מספר השורה שבה אירעה השגיאה ואת תיאור השגיאה. כל המידע הזה מופיע ברכיב 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. בודקים את מספר השורה בקובץ המקור של JavaScript (שזוהה בשלב 1 למעלה) ומוודאים לאובייקט יש ערך חוקי או שהוא לא מוגדר. יכול להיות שתצטרכו לקרוא ולהבין את קובץ המקור השלם כדי להבין איך הוגדר או נגזר האובייקט הספציפי, ואיך נגיע למסקנה שהאובייקט לא מוגדר. אם גיליתם שהאובייקט הספציפי אכן לא מוגדר ואתם מנסים לגשת לאורך המאפיין ממנו, זו הסיבה לשגיאה.

    הדוגמה הבאה תעזור לכם להבין את הבעיה.

    1. נניח שקיבלתם את תגובת ה-JSON הבאה משרת הקצה העורפי:

      {
          "cars": [
             { "name":"Toyota", "count": 150 }
             { "name":"Honda", "count": 100 },
             { "name":"Ford", "count": 75 }
          ]
      }
      
    2. הנה דוגמה לקובץ מקור של JavaScript שמנתח את תגובת ה-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. אם בודקים היטב את קוד ה-JavaScript, רואים שבשורה מספר 2, הערך של response.content נקרא או נשמר במשתנה jsonData כמחרוזת רגילה (בתוך מירכאות).

    4. jsonData היא מחרוזת רגילה, לכן אם תנסו לגשת אל cars מ-jsonData (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.

כדי לתקן את קוד ה-JavaScript לדוגמה שמתואר למעלה, אפשר להשתמש בפונקציה 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. מאתרים את מדיניות JavaScript, את קובץ המקור שלה, את מספר השורה שבה אירעה שגיאה, ואת תיאור השגיאה. כל המידע הזה זמין רכיב ה-faultstring של תגובת השגיאה. לדוגמה, במקומות הבאים faultstring, שם מדיניות JavaScript הוא URIDecode</code JavaScript קובץ המקור הוא 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. בודקים את קובץ המקור של JavaScript ומוודאים שהארגומנט שהוענק לאחת מפונקציות ה-URI לא מכיל תווים לא חוקיים. אם כן, זו הסיבה לשגיאה.

    הנה דוגמה לקובץ מקור של JavaScript שמוביל לשגיאה הזו:

    URIDecode.js

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

    בקוד JavaScript לדוגמה שמוצג למעלה, המשתנה str שהועבר אל decodeURIComponent() מכיל סמל אחוזים, שנחשב לתו לא חוקי; ולכן מקבלים את השגיאה:

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

רזולוציה

מוודאים שכל התווים שבהם נעשה שימוש בפונקציות ה-URI הם חוקיים ומותרים.

כדי לפתור את הבעיה בדוגמת ה-JavaScript שתוארה למעלה, יש לקודד את סמל האחוז. לדוגמה, %25:

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