אתם מציגים את מסמכי התיעוד של 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
מתרחשת כשמבצעים פעולה על ערך או מעבירים ערך לפונקציה שלא נמצא בקבוצה או בטווח של הערכים המותרים.
לדוגמה, השגיאה הזו מתקבלת בנסיבות הבאות:
- אם משתמשים בתאריך לא חוקי, כמו 31 בספטמבר 2018, בחלק מממשקי ה-API של תאריך.
- אם מעבירים ערך לא תקין לשיטות מספריות כמו
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
רזולוציה
הקפידו להשתמש תמיד בתאריך חוקי כשמשתמשים בממשקי 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);
בדוגמה הזו, שימו לב שבשורה מספר 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"
}
}
}
אבחון
מזהים את מדיניות 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
) שמועבר ל-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>
. ה-APIJSON.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"
}
}
}
אבחון
מאתרים את מדיניות 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);