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

אתם מציגים את מסמכי התיעוד של Apigee Edge.
כניסה למסמכי העזרה של Apigee X.
info

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

    הערה: הפורמט 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)\""
    

רזולוציה

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