פתרון בעיות בזמן ריצה של מדיניות 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 עלולה לגרום לשגיאות ScriptExecution יודעים שנכשלות בסוגים רבים של שגיאות. בטבלה הבאה מפורטות חלק מהשגיאות הנפוצות ביותר:

סוג השגיאה הסיבה
שגיאת טווח אם משתמשים במספר שאינו בטווח הערכים החוקיים, המערכת מוסיפה את הערך RangeError.
שגיאת הפניה המערכת מוסיפה את הערך ReferenceError אם משתמשים במשתנה (reference) שלא הוצהר.
שגיאת תחביר אם תנסו להעריך קוד עם שגיאת תחביר, יופיע הערך SyntaxError.
שגיאת סוג שגיאת TypeError מוצגת אם משתמשים בפעולה שנמצאת מחוץ לטווח הסוגים הצפויים.
שגיאת URI המערכת מוסיפה URIError אם משתמשים בתווים לא חוקיים בפונקציית URI.

שגיאת טווח

סוג השגיאה 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"
        }
    }
}

הערה: האבחון והפתרון של שגיאות טווח תלויים בהודעת השגיאה המדויקת שהתקבלה במדיניות 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. התאריך הזה לא חוקי כי בספטמבר אין 31 ימים.

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

רזולוציה

חשוב להקפיד להשתמש תמיד בתאריך חוקי בזמן השימוש בממשקי Date 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);
    

    בדוגמה הזו, שימו לב שנעשה שימוש בערך גדול של 400 בשורה מספר 2. מכיוון שלא ניתן להגדיר את הדיוק למספר כה גדול של ספרות, תתקבל השגיאה הבאה:

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

רזולוציה

צריך לוודא שהמספר שנעשה בו שימוש בשיטה 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.

לדוגמה, אם המטען הייעודי (payload) הלא חוקי או בפורמט שגוי של 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) שהועבר לשרת ה-proxy של ה-API משמש כקלט לפונקציה 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 מועבר אל שרת ה-API של שרת ה-proxy <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

סוג השגיאה URIError מוחזר אם משתמשים בתווים לא חוקיים בפונקציית URI. לדוגמה, אם מעבירים 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 של תגובת השגיאה. לדוגמה, במחרוזת התקלה הבאה, שם המדיניות של 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);