คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ
Apigee X info
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 แสดง ตัวอย่าง 2 รายการอธิบายไว้ด้านล่างเพื่อให้คุณใช้อ้างอิง
ตัวอย่างที่ 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.วันที่นี้ไม่ถูกต้องเนื่องจากเดือนกันยายนมี 30 วันหมายเหตุ: รูปแบบ 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 ตัวอย่างที่แสดงด้านบน ให้กำหนดตัวแปร price ก่อนที่จะใช้ เช่น
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 Proxy จะใช้เป็นอินพุตของฟังก์ชัน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.parseAPI คาดหวังว่าจะได้รับ 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()จะเรียกใช้ได้เฉพาะในออบเจ็กต์สตริง - หากคุณพยายามอ่านพร็อพเพอร์ตี้จากออบเจ็กต์ที่เป็นค่าว่างหรือไม่ได้กำหนด
เนื้อหาการตอบกลับข้อผิดพลาด
{
"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 ด้านบน) และยืนยันว่าออบเจ็กต์มีค่าที่ถูกต้องหรือไม่ได้กำหนด คุณอาจต้องอ่านและทำความเข้าใจไฟล์ต้นฉบับทั้งหมดเพื่อพิจารณาว่ามีการกำหนดหรือได้มาซึ่งออบเจ็กต์ที่เฉพาะเจาะจงอย่างไร และพิจารณาว่าเหตุใดระบบจึงพบว่าออบเจ็กต์ไม่ได้กำหนดไว้ หากพบว่าออบเจ็กต์ที่เฉพาะเจาะจงนั้นไม่ได้กำหนดไว้และคุณพยายามเข้าถึงพร็อพเพอร์ตี้ length จากออบเจ็กต์ดังกล่าว นั่นคือสาเหตุของข้อผิดพลาด
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหานี้ให้ดียิ่งขึ้น
สมมติว่าคุณได้รับการตอบกลับ 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);