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.
Truy cập vào tài liệu 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ể gây ra lỗi

Chính sách JavaScript có thể đưa ra 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 bên dưới:

Loại lỗi Nguyên nhân
Lỗi phạm vi Một RangeError sẽ được gửi nếu bạn sử dụng một số nằm ngoài phạm vi giá trị hợp lệ.
Lỗi tham chiếu Một 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 Một SyntaxError sẽ được gửi nếu bạn cố gắng đánh giá mã có lỗi cú pháp.
Lỗi về kiểu 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 URIError sẽ được gửi nếu bạn sử dụng các ký tự không hợp lệ trong một hàm URI.

Lỗi phạm vi

Loại lỗi RangeError sẽ xuất hiện khi bạn thao tác trên một giá trị hoặc truyền một giá trị đến một hàm không nằm trong tập hợp hoặc phạm vi giá trị được phép.

Ví dụ: lỗi này sẽ xảy 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ố Date API.
  2. Nếu bạn truyền một giá trị không hợp lệ cho các phương thức số 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 trong phương thức Number.toPrecision(), bạn sẽ thấy lỗi về 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 đưa ra. 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, 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ử faultstring của phản hồi lỗi. Ví dụ: trong faultstring sau đây, 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ệ 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à một 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. Khi kiểm tra tệp nguồn, bạn có thể thấy rằng biến date được đặt với một 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 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 dùng Date API trong mã JavaScript.

Để sửa mã JavaScript ví dụ nêu trên, bạn có thể đặt ngày là Sept 30 2018 như minh hoạ bên dưới:

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, 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ử faultstring của phản hồi lỗi. Ví dụ: trong faultstring 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)\""
    
  2. Kiểm tra tệp nguồn JavaScript (được xác định trong bước 1 ở trên). Nếu số lượng lớn được đề cập trong phần mô tả lỗi được dùng trong số dòng cụ thể, thì đó là nguyên nhân gây ra lỗi.

    Sau đây là một 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, hãy lưu ý rằng giá trị lớn là 400 được dùng ở dòng số 2. Vì không thể đặt độ chính xác thành một số lượng lớn chữ số 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 ví dụ về JavaScript được mô tả ở trên, hãy đặt số chữ số có nghĩa thành 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 sẽ xuất hiện khi một biến không xác định trong JavaScript của bạn được dùng (tham chiếu) hoặc hoạt động.

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 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 xác định ở bước 1 ở trên có đang được tham chiếu hay không. Ví dụ: đoạn mã JavaScript sau đây tham chiếu đến biến không xác định price ở dòng 3, khớp với nội dung trong 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);
    
    
  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ụ nêu trên, biến price chưa khai báo/xác định được 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 ví dụ về JavaScript nêu trên, hãy xác định biến giá 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 sẽ được gửi khi công cụ JavaScript gặp phải các mã thông báo hoặc một thứ tự mã thông báo không tuân thủ cú pháp của ngôn ngữ, hoặc khi một đầ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 bị lỗi được truyền dưới dạng đầu vào cho API JSON.parse được 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 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, 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ử faultstring của phản hồi lỗi. Ví dụ: trong faultstring 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)\""
    
  2. Kiểm tra dòng số 2 trong tệp nguồn JavaScript (được xác định trong bước 1 ở trên) và kiểm tra xem thao tác nào đang được thực hiện. Nếu 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 sai định dạng, 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 API Proxy sẽ được dùng làm đầu vào cho hàm JSON.parse().

    Sau đây là lệnh gọi API mẫu cho biết cách truyề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 API Proxy <city>Bangalore</city>. API JSON.parse dự kiến sẽ được truyền một JSON hợp lệ, nhưng vì thay vào đó, một tải trọng XML được truyền nên API này không thành công với lỗi bên dưới:

    "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ệ cho 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 được 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 sẽ xuất hiện khi:

  • Một toán hạng hoặc đối số được truyền đến 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 về kiểu sẽ đượ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àm toUpperCase() 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ừ 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 một 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 cố gắng gọi hàm toUpperCase() trên một số, bạn sẽ gặp lỗi. Nguyên nhân là do bạn 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, 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ử 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à 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)\""
    

    Nội dung 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ị bằng 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 một đối tượng có giá trị số là 100 ở số dòng 2 (được xác định ở bước 1 ở trên) hay không. Nếu có, thì đó là nguyên nhân gây ra lỗi.

    Sau đây là một 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 ở trên, biến number được đặt với giá trị là 100. Sau đó, hàm toUpperCase()( sẽ đượ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ừ 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, thì 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 vào dữ liệu từ một đối tượng trong mảng, nhưng đối tượng đó không được xác định. Hãy xem phần 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, 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ử 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à 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 từ một đối tượng không xác định.

  2. 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 toàn bộ tệp nguồn để xác định cách đối tượng cụ thể được xác định hoặc lấy ra và xác định lý do đối tượng được coi là chưa xác định. Nếu bạn thấy rằng đối tượng cụ thể thực sự chưa được xác định và bạn đang cố gắng truy cập vào độ dài thuộc tính từ đối tượng đó, thì đó chính là nguyên nhân gây ra lỗi.

    Hãy xem một 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. Sau đây là một 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. Khi xem xét kỹ mã JavaScript, bạn có thể thấy rằng ở dòng số 2, response.content được đọc/lưu trữ vào biến jsonData dưới dạng một chuỗi thông thường (trong dấu ngoặc kép).

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

    5. 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ách sử dụng các API JSON có liên quan.

Để sửa ví dụ về JavaScript đượ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 mảng thành cô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ẽ xuất hiện nếu bạn dùng các ký tự không hợp lệ trong một hàm URI. Ví dụ: nếu truyền một URI có ký hiệu phần trăm vào 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ử faultstring của phản hồi lỗi. Ví dụ: trong faultstring sau đây, 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 chuỗi URI bị lỗi được dùng ở 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 truyền đến bất kỳ hàm URI nào có chứa ký tự không hợp lệ hay không. Nếu có, thì đó là nguyên nhân gây ra lỗi.

    Sau đây là một 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 ở trên, biến str được truyền đến decodeURIComponent() có ký hiệu phần trăm. Đâ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ả các ký tự được dùng trong các hàm URI đều hợp lệ và được phép.

Để khắc phục vấn đề với ví dụ về JavaScript đượ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);