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 được liệt kê trong bảng bên dưới:
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 | Lỗi ReferenceError sẽ được gửi 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 | Hệ thống sẽ gửi TypeError nếu bạn sử dụng một thao tác nằm ngoài phạm vi loại dự kiến. |
Lỗi URI | 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. |
Lỗi phạm vi
Loại lỗi RangeError
được gửi 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 thuộc tập hợp hoặc phạm vi giá trị được phép.
Ví dụ: lỗi này được gửi trong các trường hợp sau:
- Nếu bạn sử dụng một ngày không hợp lệ như ngày 31 tháng 9 năm 2018 với một số API Ngày.
- Nếu bạn chuyển một giá trị không hợp lệ vào các phương thức số 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 trong 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 về 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 ý: Kết quả chẩn đoán và độ phân giải các lỗi phạm vi phụ thuộc vào thông báo lỗi chính xác mà 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 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ử
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ệ nào đang được sử dụng trong số dòng được chỉ định trong lỗi hay không hoặc biến được sử 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 sử dụng trong dòng số 2. Khi kiểm tra tệp nguồn, bạn có thể thấy biếndate
được đặt với 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 bạn luôn sử dụng ngày hợp lệ khi sử dụng API Ngày trong mã JavaScript.
Để khắc phục mã JavaScript mẫu ở trên, bạn có thể đặt ngày là Sept 30 2018
như sau:
var date = new Date('2018-09-30T11:19:08.402Z');
date.toISOString();
Ví dụ 2: Số không hợp lệ được chuyển đến API Chính xác
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 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ử
faultstring
của phản hồi lỗi. Ví dụ: trongfaultstring
sau đây, 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ố lớn được đề cập trong phần mô tả lỗi được sử dụng trong số dòng cụ thể, 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:
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. Vì không thể đặt độ chính xác thành một số 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
Đảm bảo rằng số được dùng trong phương thức toPrecision()
nằm trong tập hợp các giá trị được phép.
Để khắc phục vấn đề với JavaScript mẫu được mô tả ở trên, hãy đặt số lượng chữ số có nghĩa thành 2 và hợp lệ như sau:
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 sử dụng (tham chiếu) hoặc thao tác.
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 khi gặp 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 mà 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, 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 chưa 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 xác định trong bước #1 ở trên có đang được tham chiếu hay không. Ví dụ: mã JavaScript sau đây tham chiếu biến không xác định
price
ở 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ụ hiển thị ở 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 đều được xác định đúng cách.
Để khắc phục vấn đề với JavaScript mẫu ở trên, hãy xác định giá biến 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 phải mã thông báo hoặc thứ tự mã thông báo không tuân thủ cú pháp của ngôn ngữ hoặc khi dữ liệu đầu vào có định dạng không hợp lệ được truyền đến các API trình phân tích cú pháp 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 truyền dưới dạng dữ liệu đầu vào cho API JSON.parse
dùng trong chính sách JavaScript, thì bạn sẽ gặp lỗi này.
Nội dung phản hồi về 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 khi gặp 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 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ử
faultstring
của phản hồi lỗi. Ví dụ: trongfaultstring
sau đây, 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 xem thao tác 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 là JSON có định dạng không chính xác, thì đó 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 truyề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 yêu cầu được chuyển:
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 được truyền đến Proxy API
<city>Bangalore</city>
. APIJSON.parse
dự kiến sẽ truyền một JSON hợp lệ, nhưng vì tải trọng XML được truyền, nên API này không thành công và báo 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ớ truyề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ới 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 kiểu mà toán tử hoặc hàm đó dự kiến.
- 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 sai.
Ví dụ: hệ thống sẽ gửi một lỗi về loại:
- Nếu bạn cố gắng gọi hàm
toUpperCase()
trên một số. Lý do là hàmtoUpperCase()
chỉ có thể được gọi trên các đối tượng chuỗi. - Nếu bạn cố gắng đọc một thuộc tính 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 một đối tượng không được hỗ trợ, bạn sẽ gặp lỗi này.
Ví dụ: nếu bạn cố gắng gọi hàm toUpperCase()
trên một số, bạn sẽ gặp lỗi. Lý do là hàm toUpperCase()
chỉ có thể được gọi 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 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ử
faultstring
của phản hồi lỗi. Ví dụ: trongfaultstring
sau, tên chính sách JavaScript làConvertToUpperCase
, tệp nguồn làConvertToUpperCase.js
, số dòng là2
và nội dung 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)\""
Phần mô tả lỗi cho biết bạn đang gọi hàm
toUpperCase()
trên đố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 (được xác định trong bước # 1 ở trên). Nếu có, 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:
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ụ ở 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ừ mộ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 đó chưa được xác định. 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 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ử
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à nội dung 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 này cho biết không thể đọc thuộc tính length (chiều dài) từ một đối tượng không xác định.
Kiểm tra số dòng trong tệp nguồn JavaScript (được xác định ở 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. Bạn có thể 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 xác định hoặc bắt nguồn và xác định lý do đối tượng được cho là không xác định. Nếu bạn thấy rằng đối tượng cụ thể thực sự không được xác định và bạn đang cố gắng truy cập vào chiều dài thuộc tính từ đối tượng đó, thì đó 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); }
Khi kiểm tra kỹ mã JavaScript, bạn có thể thấy rằng ở dòng 2,
response.content
được đọc/lưu vào 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ập vàocars
từjsonData
, (jsonData.cars
) sẽ không được xác định.Sau đó, khi cố gắng đọc thuộc tính
length
từjsonData.cars
(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.
Để khắc phục JavaScript mẫu được mô tả ở trên, bạn có thể sử 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 qua 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 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 khi gặp 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 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ử faultstring 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)\""
Nội dung mô tả lỗi cho biết một trình tự URI có định dạng không chính xác đượ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 truyền đến bất kỳ hàm URI nào có chứa ký tự bất hợp lệ hay không. Nếu có, đó chính là nguyên nhân gây ra lỗi.
Dưới đây là một tệp nguồn JavaScript mẫu 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 mã JavaScript mẫu ở trên, biến
str
được truyền đếndecodeURIComponent()
có ký hiệu phần trăm, được coi là một ký tự bất 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 các hàm URI đều hợp pháp và được phép.
Để khắc phục vấn đề với JavaScript mẫu được mô tả ở trên, hãy sử dụng mã hoá ký hiệu phần trăm. Ví dụ: %25
:
var str = "75%25-Completed";
var decoded_str = decodeURIComponent(str);
context.setVariable("decoded_str", decoded_str);