אתם צופים במסמכי התיעוד של 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 מופעל כשמבצעים פעולה על ערך או מעבירים ערך לפונקציה שלא נמצאים בקבוצה או בטווח של הערכים המותרים.
לדוגמה, השגיאה הזו מופיעה בנסיבות הבאות:
- אם משתמשים בתאריך לא תקין כמו 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.התאריך הזה לא תקין כי בספטמבר יש רק 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"
}
}
}
אבחון
מזהים את מדיניות 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>'בדוגמה של הבקשה שלמעלה, מטען ה-XML הייעודי (payload) הבא מועבר אל API Proxy
<city>Bangalore</city>. JSON.parseAPI מצפה לקבל 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"
}
}
}
אבחון
מזהים את מדיניות 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 למעלה) ומוודאים שלאובייקט יש ערך תקין או שהוא לא מוגדר. יכול להיות שתצטרכו לקרוא ולהבין את קובץ המקור המלא כדי לקבוע איך האובייקט הספציפי הוגדר או נגזר, וכדי לקבוע למה האובייקט נמצא כלא מוגדר. אם האובייקט הספציפי לא מוגדר ואתם מנסים לגשת למאפיין length שלו, זו הסיבה לשגיאה.
כדי להבין טוב יותר את הבעיה הזו, נבחן דוגמה:
נניח שקיבלתם את תגובת ה-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);