คุณกำลังดูเอกสารประกอบ Apigee Edge
ไปที่
เอกสารประกอบเกี่ยวกับ Apigee X. ข้อมูล
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 | จะมีการส่ง URIError หากคุณใช้อักขระที่ไม่ถูกต้องในฟังก์ชัน URI |
ข้อผิดพลาดของช่วง
ระบบจะแสดงข้อผิดพลาดประเภท RangeError
เมื่อคุณดำเนินการกับค่าหรือส่งค่าไปยังฟังก์ชันที่ไม่ได้อยู่ในชุดหรือช่วงของค่าที่อนุญาต
ตัวอย่างเช่น ข้อผิดพลาดนี้จะเกิดขึ้นในกรณีต่อไปนี้
- หากคุณใช้วันที่ที่ไม่ถูกต้อง เช่น 31 กันยายน 2018 กับ Date 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.
วันที่นี้ไม่ถูกต้องเนื่องจากเดือนกันยายนไม่มี 31 วันหมายเหตุ: รูปแบบ ISO-8601 ที่ใช้ในตัวอย่างนี้คือ
YYYY-MM-DDTHH:mm:ss.sssZ
ความละเอียด
โปรดตรวจสอบวันที่ที่ถูกต้องเสมอในขณะที่ใช้ Date 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 ซึ่งตรงกับสิ่งที่อยู่ใน faultstringComputeTotalPrice.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
เช่น หากระบบส่งเพย์โหลด JSON ที่ไม่ถูกต้องหรือผิดรูปแบบเป็นอินพุตไปยัง JSON.parse
API ที่ใช้ภายในนโยบาย 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);
ในตัวอย่างนี้ ระบบจะใช้เพย์โหลดคำขอ (
request.content
) ที่ส่งไปยังพร็อกซี 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 ต่อไปนี้ไปยังพร็อกซี API
<city>Bangalore</city>
JSON.parse
API คาดว่าจะมีการส่งผ่าน JSON ที่ถูกต้อง แต่เนื่องจากมีการส่งเพย์โหลด XML แทน จึงไม่สำเร็จโดยมีข้อผิดพลาดด้านล่างนี้"Execution of ParseJSONRequest failed with error: Javascript runtime error: \"SyntaxError: Unexpected token: <. (ParseJSONRequest.js:2)\""
ความละเอียด
โปรดตรวจสอบว่าได้ส่งอินพุตที่ถูกต้องไปยัง API การแยกวิเคราะห์ที่ใช้ในโค้ด JavaScript
หากต้องการแก้ไขปัญหาเกี่ยวกับนโยบายตัวอย่างที่กล่าวถึงข้างต้น ให้ส่งคําขอเพย์โหลด JSON ที่ถูกต้องดังนี้
curl -v "http://<org>-<env>.apigee.net/v1/js-demo" -H "Content-Type: application/json" -X POST -d '{"city" : "Bangalore"}'
ประเภทข้อผิดพลาด
ข้อผิดพลาดประเภท TypeError
จะแสดงเมื่อ:
- ตัวถูกดำเนินการหรืออาร์กิวเมนต์ที่ส่งไปยังฟังก์ชันไม่สามารถใช้ร่วมกับประเภทที่โอเปอเรเตอร์หรือฟังก์ชันดังกล่าวต้องการ
- เรียกใช้ฟังก์ชันกับออบเจ็กต์ Null, ไม่ได้ระบุ หรือไม่ถูกต้อง
- มีการเข้าถึงพร็อพเพอร์ตี้จากออบเจ็กต์ที่ไม่มีข้อมูล ไม่ได้กำหนด หรือไม่ถูกต้อง
เช่น แสดงข้อผิดพลาดประเภท
- หากคุณพยายามเรียกใช้ฟังก์ชัน
toUpperCase()
กับตัวเลข นี่คือ เนื่องจากสามารถเรียกใช้ฟังก์ชันtoUpperCase()
ได้ในออบเจ็กต์สตริงเท่านั้น - หากคุณพยายามอ่านพร็อพเพอร์ตี้จากออบเจ็กต์ที่ไม่มีข้อมูลหรือไม่ได้กำหนด
เนื้อหาการตอบกลับข้อผิดพลาด
{ "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 ด้านบน) และตรวจสอบว่าออบเจ็กต์มีค่าที่ถูกต้องหรือไม่ระบุ คุณอาจต้องอ่านและทำความเข้าใจไฟล์ต้นฉบับที่สมบูรณ์เพื่อดูว่ามีการกำหนดหรือดึงออบเจ็กต์ดังกล่าวอย่างไร และระบุสาเหตุที่ระบุว่าไม่มีการระบุออบเจ็กต์ หากคุณพบว่าไม่ได้กำหนดออบเจ็กต์ที่เฉพาะเจาะจงจริงและคุณกำลังพยายามเข้าถึงความยาวของพร็อพเพอร์ตี้จากออบเจ็กต์ดังกล่าว นั่นก็คือสาเหตุของข้อผิดพลาด
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหานี้ให้ดียิ่งขึ้นกัน
สมมติว่าคุณได้รับการตอบสนอง 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 โดยใช้ JSON API ที่เกี่ยวข้องเสมอ
หากต้องการแก้ไขตัวอย่าง 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 ของการตอบสนองข้อผิดพลาด ตัวอย่างเช่น ในกรณีต่อไปนี้ 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);