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

אתם צופים במסמכי התיעוד של Apigee ושל Apigee Hybrid.
לעיון במסמכי התיעוד של Apigee Edge.

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

    בדוגמה הזו, שימו לב לערך הגדול 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>'
    

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

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

רזולוציה

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

    כדי להבין טוב יותר את הבעיה הזו, נבחן דוגמה:

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