Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến tài liệu về
Apigee X. thông tin
ScriptExecutionFailed
Mã lỗi
steps.javascript.ScriptExecutionFailed
Nội dung phản hồi lỗi
{ "fault": { "faultstring": "Execution of javascript_policy_name failed with error: error_type: error_description. (javascript_source_file_name)\"", "detail": { "errorcode": "steps.javascript.ScriptExecutionFailed" } } }
Các loại lỗi và nguyên nhân có thể xảy ra
Chính sách JavaScript có thể gửi nhiều loại lỗi ScriptExecutionFailed. Một số lỗi thường gặp hơn được liệt kê trong bảng dưới đây:
Loại lỗi | Nguyên nhân |
Lỗi phạm vi | Hệ thống sẽ gửi RangeError nếu bạn sử dụng một số nằm ngoài phạm vi giá trị hợp pháp. |
Lỗi tham chiếu | Hệ thống sẽ gửi ReferenceError nếu bạn sử dụng (tham chiếu) một biến chưa được khai báo. |
Lỗi cú pháp | Hệ thống sẽ gửi SyntaxError nếu bạn cố gắng đánh giá mã có lỗi cú pháp. |
Lỗi loại | Lỗi TypeError sẽ được gửi nếu bạn sử dụng một thao tác nằm ngoài phạm vi của các loại dự kiến. |
Lỗi URI | Lỗi URIError được gửi nếu bạn sử dụng các ký tự không hợp lệ trong hàm URI. |
Lỗi phạm vi
Loại lỗi RangeError
được tạo ra khi bạn thao tác trên một giá trị hoặc truyền một giá trị vào một hàm không có trong tập hợp hoặc phạm vi các giá trị được cho phép.
Ví dụ: lỗi này được tạo ra trong các trường hợp sau:
- Nếu bạn sử dụng ngày không hợp lệ, chẳng hạn như ngày 31 tháng 9 năm 2018 với một số API Ngày.
- Nếu bạn truyền giá trị không hợp lệ vào các phương thức số, chẳng hạn như
Number.toPrecision()
,Number.tofixed()
hoặcNumber.toExponential()
. Ví dụ: giả sử bạn truyền một giá trị lớn như 400 hoặc 500 vào phương thứcNumber.toPrecision()
, bạn sẽ thấy lỗi phạm vi. - Nếu bạn tạo một mảng có độ dài không hợp lệ.
Nội dung phản hồi lỗi
{ "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" } } }
Lưu ý: Việc chẩn đoán và giải quyết lỗi phạm vi phụ thuộc vào thông báo lỗi chính xác do chính sách JavaScript gửi. Dưới đây là một số ví dụ để bạn tham khảo.
Ví dụ 1: Ngày không hợp lệ
Ví dụ về nội dung phản hồi lỗi
{
"fault": {
"faultstring": "Execution of ParseDate failed with error: Javascript runtime error: \"RangeError: Date is invalid. (ParseDate.js:2)\"",
"detail": {
"errorcode": "steps.javascript.ScriptExecutionFailed"
}
}
}
Chẩn đoán
Xác định chính sách JavaScript, tệp nguồn của chính sách, số dòng nơi xảy ra lỗi và mô tả lỗi. Bạn có thể tìm thấy tất cả thông tin này trong phần tử
faultstring
của phản hồi lỗi. Ví dụ: trongfaultstring
sau, tên chính sách JavaScript làParseDate
, tệp nguồn JavaScript làParseDate.js
, số dòng xảy ra lỗi là2
và nội dung mô tả lỗi làDate is invalid
:"faultstring": "Execution of ParseDate failed with error: Javascript runtime error: \"RangeError: Date is invalid. (ParseDate.js:2)\""
Kiểm tra tệp nguồn JavaScript (được xác định ở bước 1 ở trên) và kiểm tra xem có ngày không hợp lệ đang được sử dụng trong số dòng được chỉ định trong lỗi hay không hoặc liệu biến được dùng trong số dòng có ngày không hợp lệ hay không. Nếu bạn sử dụng ngày không hợp lệ thì đó là nguyên nhân gây ra lỗi.
Dưới đây là tệp nguồn JavaScript mẫu dẫn đến lỗi này:
ParseDate.js
var date = new Date('2018-09-31T11:19:08.402Z'); date.toISOString();
Trong ví dụ này, có một biến
date
được dùng ở dòng số 2. Kiểm tra tệp nguồn, bạn có thể thấy biếndate
được đặt có ngày không hợp lệ:2018-09-31T11:19:08.402Z.
Ngày này không hợp lệ vì tháng 9 không có 31 ngày.Lưu ý: Định dạng ISO-8601 được sử dụng trong ví dụ này là:
YYYY-MM-DDTHH:mm:ss.sssZ
Độ phân giải
Đảm bảo rằng bạn luôn sử dụng ngày hợp lệ khi sử dụng API ngày trong mã JavaScript.
Để sửa đoạn mã JavaScript ví dụ hiển thị ở trên, bạn có thể đặt ngày là Sept 30 2018
như minh hoạ dưới đây:
var date = new Date('2018-09-30T11:19:08.402Z');
date.toISOString();
Ví dụ 2: Số không hợp lệ được truyền đến Precision API
Ví dụ về nội dung phản hồi lỗi
{
"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"
}
}
}
Chẩn đoán
Xác định chính sách JavaScript, tệp nguồn của chính sách, số dòng nơi xảy ra lỗi và mô tả lỗi. Bạn có thể tìm thấy tất cả thông tin này trong phần tử
faultstring
của phản hồi lỗi. Ví dụ: trongfaultstring
sau, tên chính sách JavaScript làSetNumberPrecision
, tệp nguồn JavaScript làSetNumberPrecision.js
, số dòng xảy ra lỗi là 2 và nội dung mô tả lỗi làPrecision 400 out of range.
"faultstring": "Execution of SetNumberPrecision failed with error: Javascript runtime error: "RangeError: Precision 400 out of range. (SetNumberPrecision.js:2)\""
Kiểm tra tệp nguồn JavaScript (được xác định ở bước 1 ở trên). Nếu số dòng lớn được đề cập trong phần mô tả lỗi được sử dụng trong số dòng cụ thể, thì đó chính là nguyên nhân gây ra lỗi.
Dưới đây là tệp nguồn JavaScript mẫu dẫn đến lỗi này:
SetNumberPrecision.js
var number = 12.3456; var rounded_number = number.toPrecision(400); print("rounded_number = " + rounded_number);
Trong ví dụ này, lưu ý rằng giá trị lớn 400 được sử dụng trong dòng số 2. Do không thể đặt độ chính xác là số lượng chữ số lớn như vậy, nên bạn sẽ gặp lỗi dưới đây:
"faultstring": "Execution of SetNumberPrecision failed with error: Javascript runtime error: "RangeError: Precision 400 out of range. (SetNumberPrecision.js:2)\""
Độ phân giải
Hãy đảm bảo rằng số dùng trong phương thức toPrecision()
nằm trong tập hợp các giá trị cho phép.
Để khắc phục vấn đề với JavaScript ví dụ được mô tả ở trên, hãy đặt số chữ số có nghĩa là 2 hợp lệ:
var number = 12.3456;
var rounded_number = number.toPrecision(2);
print("rounded_number = " + rounded_number);
Lỗi tham chiếu
Loại lỗi ReferenceError
được gửi khi một biến không xác định trong JavaScript của bạn được sử dụng (được tham chiếu) hoặc hoạt động trên đó.
Nội dung phản hồi lỗi
{ "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" } } }
Ví dụ về nội dung phản hồi lỗi
{
"fault": {
"faultstring": "Execution of ComputeTotalPrice failed with error: Javascript runtime error: \"ReferenceError: \"price\" is not defined. (ComputeTotalPrice.js:3)\"",
"detail": {
"errorcode": "steps.javascript.ScriptExecutionFailed"
}
}
}
Chẩn đoán
Xác định chính sách JavaScript, tệp nguồn của chính sách và số dòng nơi biến không xác định được tham chiếu. Bạn có thể tìm thấy tất cả thông tin này trong phần tử
faultstring
của phản hồi lỗi. Ví dụ: trongfaultstring
sau đây, tên chính sách JavaScript làComputeTotalPrice
, tệp nguồn tương ứng làComputeTotalPrice.js
, số dòng xảy ra lỗi là3
và tên biến không xác định làprice.
"faultstring": "Execution of ComputeTotalPrice failed with error: Javascript runtime error: \"ReferenceError: \"price\" is not defined. (ComputeTotalPrice.js:3)\""
Kiểm tra số dòng trong tệp nguồn JavaScript và xác minh xem biến không xác định có được xác định trong bước #1 ở trên hay không, có đang được tham chiếu hay không. Ví dụ: mã JavaScript sau đây tham chiếu biến
price
không xác định trong dòng 3, biến này khớp với nội dung trong chuỗi lỗi: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);
Kiểm tra xem biến cụ thể có được xác định trong mã JavaScript hay không. Nếu biến không được xác định, thì đó là nguyên nhân gây ra lỗi.
Trong tập lệnh ví dụ ở trên, biến
price
chưa được khai báo/xác định đã được sử dụng; do đó, bạn sẽ thấy lỗi bên dưới:"faultstring": "Execution of ComputeTotalPrice failed with error: Javascript runtime error: \"ReferenceError: \"price\" is not defined. (ComputeTotalPrice.js:3)\""
Độ phân giải
Đảm bảo rằng tất cả các biến được tham chiếu trong mã JavaScript được xác định đúng.
Để khắc phục vấn đề với JavaScript ví dụ hiển thị ở trên, hãy xác định giá biến đổi trước khi sử dụng. Ví dụ:
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);
Lỗi cú pháp
Loại lỗi SyntaxError
được gửi khi công cụ JavaScript gặp mã thông báo hoặc thứ tự mã thông báo không tuân theo cú pháp của ngôn ngữ, hoặc khi giá trị nhập có định dạng không hợp lệ được chuyển đến API phân tích cú pháp, chẳng hạn như phân tích cú pháp JSON/XML.
Ví dụ: nếu tải trọng JSON không hợp lệ hoặc không đúng định dạng được chuyển dưới dạng dữ liệu đầu vào vào API JSON.parse
dùng trong chính sách JavaScript, bạn sẽ gặp lỗi này.
Nội dung phản hồi lỗi
{ "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" } } }
Ví dụ về nội dung phản hồi lỗi
{
"fault": {
"faultstring": "Execution of ParseJSONRequest failed with error: Javascript runtime error: \"SyntaxError: Unexpected token: <. (ParseJSONRequest.js:2)\"",
"detail": {
"errorcode": "steps.javascript.ScriptExecutionFailed"
}
}
}
Chẩn đoán
Xác định chính sách JavaScript, tệp nguồn của chính sách, số dòng nơi xảy ra lỗi và mô tả lỗi. Bạn có thể tìm thấy tất cả thông tin này trong phần tử
faultstring
của phản hồi lỗi. Ví dụ: trongfaultstring
sau, tên chính sách JavaScript làParseJSONRequest
, tệp nguồn JavaScript làParseJSONRequest.js
, số dòng xảy ra lỗi là2
và nội dung mô tả lỗi làUnexpected token
:"faultstring": "Execution of ParseJSONRequest failed with error: Javascript runtime error: \"SyntaxError: Unexpected token: <. (ParseJSONRequest.js:2)\""
Kiểm tra dòng số 2 trong tệp nguồn JavaScript (được xác định ở bước 1 ở trên) và kiểm tra tác vụ nào đang được thực hiện. Nếu một hàm
JSON.parse()
đang được thực thi, hãy kiểm tra tham số đầu vào được truyền vào hàm đó. Nếu tham số đầu vào không hợp lệ hoặc không đúng định dạng JSON, thì đó chính là nguyên nhân gây ra lỗi.Dưới đây là mã JavaScript mẫu dẫn đến lỗi này:
var input = context.getVariable("request.content"); var result = JSON.parse(input);
Trong ví dụ này, tải trọng yêu cầu (
request.content
) được chuyển đến Proxy API được dùng làm dữ liệu đầu vào cho hàmJSON.parse()
.Dưới đây là lệnh gọi API mẫu cho thấy cách chuyển yêu cầu:
curl -v "http://<org>-<env>.apigee.net/v1/js-demo" -H "Content-Type: application/json" -X POST -d '<city>Bangalore</city>'
Trong yêu cầu trên, tải trọng XML sau đây được truyền đến Proxy API
<city>Bangalore</city>
. APIJSON.parse
dự kiến sẽ truyền một JSON hợp lệ. Tuy nhiên, do tải trọng XML được truyền nên sẽ không thành công với lỗi dưới đây:"Execution of ParseJSONRequest failed with error: Javascript runtime error: \"SyntaxError: Unexpected token: <. (ParseJSONRequest.js:2)\""
Độ phân giải
Hãy nhớ chuyển dữ liệu đầu vào hợp lệ đến các API phân tích cú pháp được dùng trong mã JavaScript.
Để khắc phục vấn đề về chính sách mẫu đã thảo luận ở trên, hãy truyền một yêu cầu tải trọng JSON hợp lệ như sau:
curl -v "http://<org>-<env>.apigee.net/v1/js-demo" -H "Content-Type: application/json" -X POST -d '{"city" : "Bangalore"}'
Lỗi loại
Loại lỗi TypeError
được gửi khi:
- Toán hạng hoặc đối số được truyền vào một hàm không tương thích với loại mà toán tử hoặc hàm đó dự kiến.
- Một hàm được gọi trên một đối tượng rỗng, không xác định hoặc không chính xác.
- Một thuộc tính được truy cập từ một đối tượng rỗng, không xác định hoặc không chính xác.
Ví dụ: một lỗi loại được gửi:
- Nếu bạn cố gắng gọi hàm
toUpperCase()
trên một số. Điều này là do hệ thống chỉ có thể gọi hàmtoUpperCase()
trên các đối tượng chuỗi. - Nếu bạn cố gắng đọc một thuộc tính từ một đối tượng rỗng hoặc không xác định.
Nội dung phản hồi lỗi
{ "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" } } }
Ví dụ 1: Gọi hàm trên đối tượng không chính xác
Nếu cố gắng gọi một hàm trên đối tượng không được hỗ trợ, thì bạn sẽ gặp lỗi này.
Ví dụ: nếu bạn cố gọi hàm toUpperCase()
trên một số, bạn sẽ gặp lỗi. Điều này là do hệ thống chỉ có thể gọi hàm toUpperCase()
trên các đối tượng chuỗi.
Ví dụ về nội dung phản hồi lỗi
{
"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"
}
}
}
Chẩn đoán
Xác định chính sách JavaScript, tệp nguồn của chính sách, số dòng nơi xảy ra lỗi và mô tả lỗi. Bạn có thể tìm thấy tất cả thông tin này trong phần tử
faultstring
của phản hồi lỗi. Ví dụ: trongfaultstring
sau đây, tên chính sách JavaScript làConvertToUpperCase
, tệp nguồn làConvertToUpperCase.js
, số dòng là2
và phần mô tả lỗi là **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)\""
Thông tin mô tả lỗi cho biết bạn đang gọi hàm
toUpperCase()
trên một đối tượng có giá trị số là 100.Kiểm tra tệp nguồn JavaScript và xác minh xem bạn có đang gọi hàm
toUpperCase()
trên đối tượng có giá trị số là 100 tại dòng số 2 (đã xác định trong bước # 1 ở trên) hay không. Nếu có thì đó chính là nguyên nhân gây ra lỗi.Dưới đây là tệp nguồn JavaScript mẫu dẫn đến lỗi này:
ConvertToUpperCase.js
var number = 100; var result = number.toUpperCase();
Trong mã JavaScript hiển thị ở trên, biến
number
được đặt với giá trị là 100. Sau đó, hàmtoUpperCase()(
được gọi trên đối tượng số. Vì hàmtoUpperCase()
chỉ có thể được gọi trên các đối tượng chuỗi, nên bạn sẽ gặp lỗi:"Execution of ConvertToUpperCase failed with error: Javascript runtime error: \"TypeError: Cannot find function toUpperCase in object 100. (ConvertToUpperCase.js:2)\""
Độ phân giải
Luôn sử dụng các hàm như toUpperCase()
trên các đối tượng hợp lệ.
Để sửa ví dụ nêu trên, bạn có thể tạo một biến chuỗi rồi gọi hàm toUpperCase()
trên một chuỗi:
var text = "Hello Apigee !";
var result = text.toUpperCase();
Ví dụ 2: Không thể đọc thuộc tính từ đối tượng không xác định
Nếu cố gắng truy cập/đọc một thuộc tính từ một đối tượng không xác định, bạn sẽ gặp lỗi này. Ví dụ: lỗi này có thể xảy ra khi bạn cố gắng truy cập dữ liệu từ một đối tượng trong một mảng, nhưng đối tượng đó không xác định được. Hãy xem nội dung giải thích chi tiết bên dưới.
Ví dụ về nội dung phản hồi lỗi
{
"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"
}
}
}
Chẩn đoán
Xác định chính sách JavaScript, tệp nguồn của chính sách, số dòng nơi xảy ra lỗi và mô tả lỗi. Bạn có thể tìm thấy tất cả thông tin này trong phần tử
faultstring
của phản hồi lỗi. Ví dụ: trongfaultstring
sau đây, tên chính sách làParseJSONResponse
, tệp nguồn làParseJSONResponse.js
, số dòng là6
và phần mô tả lỗi là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)\""
Lỗi cho biết thuộc tính length không thể đọc được từ đối tượng không xác định.
Kiểm tra số dòng trong tệp nguồn JavaScript (xác định trong bước #1 ở trên) và xác minh xem đối tượng có giá trị hợp lệ hay không xác định. Có thể bạn sẽ phải đọc và hiểu tệp nguồn hoàn chỉnh để xác định cách đối tượng cụ thể được định nghĩa hoặc dẫn xuất và xác định lý do khiến đối tượng được xác định là không xác định. Nếu bạn nhận thấy đối tượng cụ thể thực sự không xác định được và bạn đang cố truy cập vào độ dài thuộc tính của đối tượng đó, thì đó chính là nguyên nhân gây ra lỗi.
Hãy xem ví dụ để hiểu rõ hơn về vấn đề này:
Giả sử bạn nhận được phản hồi JSON sau đây từ máy chủ phụ trợ:
{ "cars": [ { "name":"Toyota", "count": 150 } { "name":"Honda", "count": 100 }, { "name":"Ford", "count": 75 } ] }
Dưới đây là tệp nguồn JavaScript mẫu phân tích cú pháp phản hồi JSON này và dẫn đến lỗi nêu trên:
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); }
Kiểm tra kỹ mã JavaScript, bạn có thể thấy rằng trong dòng số 2,
response.content
được đọc/lưu trữ trong biếnjsonData
dưới dạng một chuỗi thông thường (trong dấu ngoặc kép).Vì
jsonData
là một chuỗi thông thường nên khi bạn cố gắng truy cậpcars
từjsonData
(jsonData.cars
) sẽ không xác định được.Sau đó, khi cố gắng đọc thuộc tính
length
từjsonData.cars
(thuộc tính không xác định), bạn sẽ gặp lỗi:"faultstring": "Execution of ParseJSONResponse failed with error: Javascript runtime error: \"TypeError: Cannot read property \"length\" from undefined. (ParseJSONResponse.js:6)\""
Độ phân giải
Đảm bảo rằng bạn luôn đọc dữ liệu JSON dưới dạng đối tượng JSON bằng các API JSON có liên quan.
Để sửa ví dụ JavaScript được mô tả ở trên, bạn có thể dùng hàm JSON.parse()
trên đối tượng response.content
để lấy đối tượng đó dưới dạng đối tượng JSON. Sau đó, bạn có thể truy cập vào mảng cars
và lặp lại thành công trong mảng đó.
// 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);
}
Lỗi URI
Loại lỗi URIError
sẽ được gửi nếu bạn sử dụng các ký tự không hợp lệ trong hàm URI.
Ví dụ: nếu bạn truyền một URI có ký hiệu phần trăm đến các hàm decodeURI
hoặc decodeURIComponent
, thì bạn sẽ gặp lỗi này.
Nội dung phản hồi lỗi
{ "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" } } }
Ví dụ về nội dung phản hồi lỗi
{
"fault": {
"faultstring": "Execution of URIDecode failed with error: Javascript runtime error: \"URIError: Malformed URI sequence. (URIDecode.js:2)\"",
"detail": {
"errorcode": "steps.javascript.ScriptExecutionFailed"
}
}
}
Chẩn đoán
Xác định chính sách JavaScript, tệp nguồn của chính sách, số dòng nơi xảy ra lỗi và nội dung mô tả lỗi. Bạn có thể tìm thấy tất cả thông tin này trong phần tử chuỗi lỗi của phản hồi lỗi. Ví dụ: trong chuỗi lỗi sau, tên chính sách JavaScript là
URIDecode</code
, tệp nguồn JavaScript làURIDecode.js
, số dòng là2
và nội dung mô tả lỗi làMalformed URI sequence
:"faultstring": "Execution of URIDecode failed with error: Javascript runtime error: \"URIError: Malformed URI sequence. (URIDecode.js:2)\""
Mô tả lỗi cho biết rằng chuỗi URI không đúng định dạng được sử dụng trong dòng số 2 của
URIDecode.js
.Kiểm tra tệp nguồn JavaScript và xác minh xem đối số được chuyển đến bất kỳ hàm URI nào có chứa ký tự không hợp lệ nào không. Nếu có thì đó là nguyên nhân gây ra lỗi.
Dưới đây là ví dụ về tệp nguồn JavaScript dẫn đến lỗi này:
URIDecode.js
var str = "75%-Completed"; var decoded_str = decodeURIComponent(str); context.setVariable("decoded_str", decoded_str);
Trong ví dụ về mã JavaScript minh hoạ ở trên, biến
str
được chuyển đếndecodeURIComponent()
có ký hiệu phần trăm, ký tự này được coi là một ký tự không hợp lệ; do đó, bạn sẽ gặp lỗi:"Execution of URIDecode failed with error: Javascript runtime error: \"URIError: Malformed URI sequence. (URIDecode.js:2)\""
Độ phân giải
Đảm bảo rằng tất cả ký tự dùng trong hàm URI đều hợp pháp và được phép.
Để khắc phục vấn đề với JavaScript ví dụ mô tả ở trên, hãy mã hoá ký hiệu phần trăm. Ví dụ như %25
:
var str = "75%25-Completed";
var decoded_str = decodeURIComponent(str);
context.setVariable("decoded_str", decoded_str);