כרגע מוצג התיעוד של 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
מופיע כשמפעילים ערך או מעבירים ערך לפונקציה שלא נמצאת בטווח או בטווח הערכים המותר.
לדוגמה, שגיאה זו מתבצעת בנסיבות הבאות:
- אם אתם משתמשים בתאריך לא חוקי, כמו 31 בספטמבר 2018 עם חלק מממשקי ה-API של Date.
- אם מעבירים ערך לא חוקי לשיטות מספריות כמו
Number.toPrecision()
,Number.tofixed()
אוNumber.toExponential()
. לדוגמה, נניח שהעברת ערך גדול כמו 400 או 500 בשיטהNumber.toPrecision()
, תופיע שגיאת טווח. - אם יוצרים מערך עם אורך לא חוקי.
גוף התגובה לשגיאה
{ "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"
}
}
}
אבחון
מאתרים את מדיניות 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)\""
בוחנים את קובץ המקור של 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"
}
}
}
אבחון
מאתרים את מדיניות 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)\""
בודקים את קובץ המקור של 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"
}
}
}
אבחון
מזהים את מדיניות 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)\""
בודקים את מספר השורה בקובץ המקור של 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);
בודקים אם המשתנה הספציפי מוגדר בקוד ה-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"
}
}
}
אבחון
מאתרים את מדיניות 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 בקובץ המקור של 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"
}
}
}
אבחון
מאתרים את מדיניות 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.צריך לבדוק את קובץ המקור של ה-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"
}
}
}
אבחון
מאתרים את מדיניות 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 מאובייקט לא מוגדר.
בודקים את מספר השורה בקובץ המקור של JavaScript (שזוהה בשלב 1 למעלה) ומוודאים שלאובייקט יש ערך חוקי או שהוא לא מוגדר. ייתכן שתצטרכו לקרוא ולהבין את קובץ המקור השלם כדי לקבוע איך האובייקט הספציפי הוגדר או נגזר, וכדי להחליט למה האובייקט לא מוגדר. אם אתם מגלים שהאובייקט הספציפי אכן לא מוגדר ואתם מנסים לגשת לאורך המאפיין ממנו, זו הסיבה לשגיאה.
נביט בדוגמה הבאה כדי להבין אותה טוב יותר:
נניח שאתם מקבלים את תגובת ה-JSON הבאה משרת הקצה העורפי:
{ "cars": [ { "name":"Toyota", "count": 150 } { "name":"Honda", "count": 100 }, { "name":"Ford", "count": 75 } ] }
הנה קובץ מקור לדוגמה של 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); }
בדיקה יסודית של קוד ה-JavaScript יכולה לראות שבשורה מספר 2, הפרמטר
response.content
נקרא/מאוחסן למשתנהjsonData
כמחרוזת רגילה (במירכאות).בגלל ש-
jsonData
היא מחרוזת רגילה, ניסיון גישה אלcars
דרךjsonData
(jsonData.cars
) לא יוגדר.בעקבות זאת, כשתנסו לקרוא את המאפיין
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"
}
}
}
אבחון
מאתרים את מדיניות 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
.בוחנים את קובץ המקור של 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);