คุณกำลังดูเอกสารประกอบของ 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 พร้อมกับ 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 ส่ง ตัวอย่าง 2-3 ตัวอย่างมีอธิบายไว้ด้านล่างเพื่อให้คุณใช้เป็นข้อมูลอ้างอิง
ตัวอย่างที่ 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
ความละเอียด
ตรวจสอบว่าคุณใช้วันที่ที่ถูกต้องเสมอขณะใช้ 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
เมื่อ:
- ตัวถูกดำเนินการหรืออาร์กิวเมนต์ที่ส่งผ่านไปยังฟังก์ชันเข้ากันไม่ได้กับประเภทที่โอเปอเรเตอร์หรือฟังก์ชันนั้นคาดหวัง
- มีการเรียกใช้ฟังก์ชันในออบเจ็กต์ที่เป็นค่าว่าง ไม่ได้ระบุ หรือไม่ถูกต้อง
- มีการเข้าถึงพร็อพเพอร์ตี้จากออบเจ็กต์ที่เป็นค่าว่าง ไม่มีคำจำกัดความ หรือออบเจ็กต์ที่ไม่ถูกต้อง
ตัวอย่างเช่น มีการแสดงข้อผิดพลาดประเภท:
- ถ้าคุณพยายามเรียกใช้ฟังก์ชัน
toUpperCase()
ในตัวเลข ทั้งนี้เนื่องจากฟังก์ชันtoUpperCase()
เรียกใช้ได้เฉพาะในออบเจ็กต์สตริงเท่านั้น - กรณีที่พยายามอ่านพร็อพเพอร์ตี้จากออบเจ็กต์ที่ไม่ได้ระบุหรือ Null
เนื้อหาการตอบกลับข้อผิดพลาด
{ "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 โดยใช้ API ของ JSON ที่เกี่ยวข้องเสมอ
หากต้องการแก้ไขตัวอย่าง 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 ของการตอบสนองข้อผิดพลาด ตัวอย่างเช่น ในสตริงข้อผิดพลาดต่อไปนี้ ชื่อนโยบาย 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);