Khắc phục lỗi thời gian chạy chính sách JavaScript

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:

  1. 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.
  2. 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ặc Number.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ức Number.toPrecision(), bạn sẽ thấy lỗi phạm vi.
  3. 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

  1. 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ụ: trong faultstring 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)\""
    
  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ến date đượ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

  1. 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ụ: trong faultstring 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)\""
    
  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

  1. 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ụ: trong faultstring 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)\""
    
  2. 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);
    
    
  3. 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

  1. 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ụ: trong faultstring 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)\""
    
  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àm JSON.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>. API JSON.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àm toUpperCase() 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

  1. 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ụ: trong faultstring 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.

  2. 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àm toUpperCase()( được gọi trên đối tượng số. Vì hàm toUpperCase() 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

  1. 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ụ: trong faultstring 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.

  2. 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:

    1. 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 }
          ]
      }
      
    2. 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);
        }
      
    3. 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ến jsonData dưới dạng một chuỗi thông thường (trong dấu ngoặc kép).

    4. jsonData là một chuỗi thông thường nên khi bạn cố gắng truy cập cars từ jsonData (jsonData.cars) sẽ không xác định được.

    5. 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

  1. 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.

  2. 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 đến decodeURIComponent() 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);