JavaScript নীতি সংক্রান্ত রানটাইম সমস্যার সমাধান করা

আপনি 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"
        }
    }
}

সমস্যার ধরন ও সম্ভাব্য কারণ

জাভাস্ক্রিপ্ট নীতি বিভিন্ন ধরনের ScriptExecutionFailed সমস্যা দেখাতে পারে। নিচে দেওয়া সারণীতে কিছু সাধারণ সমস্যা দেখানো হল:

সমস্যার ধরন কারণ
রেঞ্জ সংক্রান্ত সমস্যা আপনি যদি এমন কোনও সংখ্যা ব্যবহার করেন যা আইনি মানের রেঞ্জের বাইরে, তাহলে একটি RangeError থ্রো করা হয়।
রেফারেন্স সংক্রান্ত সমস্যা আপনি যদি এমন কোনও ভেরিয়েবেল (রেফারেন্স) ব্যবহার করেন যা ঘোষণা করা হয়নি, তাহলে একটি ReferenceError থ্রো করা হয়।
সিনট্যাক্স সংক্রান্ত সমস্যা আপনি সিনট্যাক্স সংক্রান্ত সমস্যাযুক্ত কোড মূল্যায়ন করার চেষ্টা করলে, SyntaxError হয়।
টাইপ এরর প্রত্যাশিত ধরনের রেঞ্জের বাইরে কোনও অপারেশন ব্যবহার করলে TypeError হয়।
URI সংক্রান্ত সমস্যা আপনি URI ফাংশনে অবৈধ অক্ষর ব্যবহার করলে, একটি URIError থ্রো করা হয়।

রেঞ্জ সংক্রান্ত সমস্যা

RangeError ধরনের সমস্যাটি তখন হয় যখন আপনি কোনও ভ্যালু নিয়ে কাজ করেন অথবা কোনও ফাংশনে এমন ভ্যালু পাস করেন যা অনুমোদিত ভ্যালুর সেট বা রেঞ্জে নেই।

যেমন, নিম্নলিখিত পরিস্থিতিতে এই সমস্যাটি হয়:

  1. আপনি যদি কিছু তারিখ API-এর সাথে ৩১শে সেপ্টেম্বর, ২০১৮-এর মতো কোনও ভুল তারিখ ব্যবহার করেন।
  2. আপনি যদি Number.toPrecision(), Number.tofixed() বা Number.toExponential()-এর মতো সংখ্যাসূচক পদ্ধতিতে ভুল মান পাস করেন। যেমন, ধরুন আপনি Number.toPrecision() পদ্ধতিতে ৪০০ বা ৫০০-এর মতো বড় মান পাস করেছেন, আপনি একটি রেঞ্জ সংক্রান্ত সমস্যা দেখতে পাবেন।
  3. আপনি যদি বেআইনি দৈর্ঘ্য সহ কোনও অ্যারে তৈরি করেন।

সমস্যার উত্তরের বডি

{
    "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"
        }
    }
}

মনে রাখবেন: রেঞ্জ সংক্রান্ত সমস্যার ডায়াগনসিস ও সমাধান জাভাস্ক্রিপ্ট নীতির মাধ্যমে দেখানো সঠিক সমস্যার মেসেজের উপর নির্ভর করে। আপনার রেফারেন্সের জন্য নিচে কয়েকটি উদাহরণ বর্ণনা করা হল।

উদাহরণ ১: ভুল তারিখ

সমস্যার উত্তরের বডির উদাহরণ

{
    "fault": {
        "faultstring": "Execution of ParseDate failed with error: Javascript runtime error: \"RangeError: Date is invalid. (ParseDate.js:2)\"",
        "detail": {
            "errorcode": "steps.javascript.ScriptExecutionFailed"
        }
    }
}

ডায়াগনসিস

  1. JavaScript নীতি, এর সোর্স ফাইল, যে লাইন নম্বরে সমস্যা হয়েছে এবং সমস্যার বিবরণ শনাক্ত করুন। আপনি সমস্যার উত্তরের faultstring এলিমেন্টে এই সমস্ত তথ্য খুঁজে পাবেন। যেমন, নিম্নলিখিত faultstring-এ, জাভাস্ক্রিপ্ট নীতির নাম হল ParseDate, জাভাস্ক্রিপ্ট সোর্স ফাইল হল ParseDate.js, যে লাইন নম্বরে সমস্যা হয়েছে সেটি হল 2 এবং সমস্যার বিবরণ হল Date is invalid:

    "faultstring": "Execution of ParseDate failed with error: Javascript runtime error: \"RangeError: Date is invalid. (ParseDate.js:2)\""
    
  2. JavaScript সোর্স ফাইল (উপরে #১ ধাপে শনাক্ত করা হয়েছে) পরীক্ষা করে দেখুন এবং ত্রুটিতে উল্লিখিত লাইন নম্বরে কোনও ভুল তারিখ ব্যবহার করা হয়েছে কিনা অথবা লাইন নম্বরে ব্যবহৃত ভেরিয়েবলে কোনও ভুল তারিখ আছে কিনা তা চেক করুন। ভুল তারিখ ব্যবহার করা হলে, সেটিই সমস্যার কারণ।

    এখানে একটি স্যাম্পেল জাভাস্ক্রিপ্ট সোর্স ফাইল দেওয়া হল যা এই সমস্যার কারণ:

    ParseDate.js

    var date = new Date('2018-09-31T11:19:08.402Z');
    date.toISOString();
    

    এই উদাহরণে, ২ নম্বর লাইনে date ভেরিয়েবল ব্যবহার করা হয়েছে। সোর্স ফাইল পরীক্ষা করে দেখলে, আপনি দেখতে পাবেন যে date ভেরিয়েবলটি ভুল তারিখ দিয়ে সেট করা হয়েছে: 2018-09-31T11:19:08.402Z. এই তারিখটি ভুল কারণ সেপ্টেম্বর মাসে ৩১ দিন হয় না।

    মনে রাখবেন: এই উদাহরণে ব্যবহৃত ISO-8601 ফর্ম্যাট হল: YYYY-MM-DDTHH:mm:ss.sssZ

রেজোলিউশন

JavaScript কোডে Date API ব্যবহার করার সময় সবসময় সঠিক তারিখ ব্যবহার করছেন কিনা তা নিশ্চিত করুন।

উপরে দেখানো উদাহরণ জাভাস্ক্রিপ্ট কোড ঠিক করতে, আপনি নিচে দেখানো Sept 30 2018 হিসেবে তারিখ সেট করতে পারেন:

var date = new Date('2018-09-30T11:19:08.402Z');
date.toISOString();

উদাহরণ ২: 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"
        }
    }
}

ডায়াগনসিস

  1. JavaScript নীতি, এর সোর্স ফাইল, যে লাইন নম্বরে সমস্যা হয়েছে এবং সমস্যার বিবরণ শনাক্ত করুন। আপনি সমস্যার উত্তরের faultstring এলিমেন্টে এই সমস্ত তথ্য খুঁজে পাবেন। যেমন, নিম্নলিখিত faultstring-এ, জাভাস্ক্রিপ্ট নীতির নাম হল SetNumberPrecision, জাভাস্ক্রিপ্ট সোর্স ফাইল হল 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)\""
    
  2. JavaScript সোর্স ফাইল (উপরে #১ ধাপে শনাক্ত করা হয়েছে) পরীক্ষা করে দেখুন। সমস্যার বিবরণে উল্লেখ করা বড় সংখ্যাটি যদি নির্দিষ্ট লাইন নম্বরে ব্যবহার করা হয়, তাহলে সেটিই সমস্যার কারণ।

    এখানে একটি স্যাম্পেল জাভাস্ক্রিপ্ট সোর্স ফাইল দেওয়া হল যা এই সমস্যার কারণ:

    SetNumberPrecision.js

    var number = 12.3456;
    var rounded_number = number.toPrecision(400);
    print("rounded_number = " + rounded_number);
    

    এই উদাহরণে, লক্ষ্য করুন যে ২ নম্বর লাইনে ৪০০-এর মতো একটি বড় মান ব্যবহার করা হয়েছে। এত বড় সংখ্যার জন্য আপনি নির্ভুলতা সেট করতে পারবেন না, তাই নিচে উল্লেখ করা সমস্যাটি দেখতে পাবেন:

    "faultstring": "Execution of SetNumberPrecision failed with error: Javascript runtime error: "RangeError: Precision 400 out of range. (SetNumberPrecision.js:2)\""
    

রেজোলিউশন

toPrecision() পদ্ধতিতে ব্যবহৃত নম্বরটি অনুমোদিত মানের সেটের মধ্যে আছে কিনা তা নিশ্চিত করুন।

উপরে বর্ণিত উদাহরণ JavaScript-এর সমস্যা সমাধান করতে, সার্থক অঙ্কের সংখ্যাকে ২ হিসেবে সেট করুন যা সঠিক:

var number = 12.3456;
var rounded_number = number.toPrecision(2);
print("rounded_number = " + rounded_number);

রেফারেন্স সংক্রান্ত সমস্যা

আপনার JavaScript-এ অনির্ধারিত ভেরিয়েবেল ব্যবহার (রেফারেন্স) করা হলে বা সেটির উপর অপারেশন করা হলে ReferenceError ধরনের সমস্যা হয়।

সমস্যার উত্তরের বডি

{
    "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"
        }
    }
}

ডায়াগনসিস

  1. JavaScript নীতি, এর সোর্স ফাইল এবং যে লাইন নম্বরে অনির্দিষ্ট ভেরিয়েবেল রেফারেন্স করা হয়েছে তা শনাক্ত করুন। আপনি সমস্যার উত্তরের faultstring এলিমেন্টে এই সমস্ত তথ্য খুঁজে পাবেন। যেমন, নিম্নলিখিত faultstring-এ, জাভাস্ক্রিপ্ট নীতির নাম হল ComputeTotalPrice, সংশ্লিষ্ট সোর্স ফাইল হল ComputeTotalPrice.js, যে লাইন নম্বরে সমস্যা হয়েছে সেটি হল 3 এবং অনির্দিষ্ট ভেরিয়েবলের নাম হল price.

    "faultstring": "Execution of ComputeTotalPrice failed with error: Javascript runtime error: \"ReferenceError: \"price\" is not defined. (ComputeTotalPrice.js:3)\""
    
  2. JavaScript সোর্স ফাইলে লাইন নম্বর পরীক্ষা করুন এবং উপরে #১ ধাপে শনাক্ত করা অনির্দিষ্ট ভেরিয়েবলটি রেফারেন্স করা হচ্ছে কিনা তা যাচাই করুন। যেমন, নিম্নলিখিত জাভাস্ক্রিপ্ট কোডটি ৩ নম্বর লাইনে অনির্দিষ্ট ভেরিয়েবল price-এর রেফারেন্স দেয়, যা 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. 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);

সিন্ট্যাক্সে সমস্যা

JavaScript ইঞ্জিন টোকেন বা টোকেনের এমন ক্রম খুঁজে পেলে SyntaxError ধরনের সমস্যা হয় যা ভাষার সিনট্যাক্স মেনে চলে না অথবা JSON/XML পার্সের মতো পার্সার API-তে ভুল ফর্ম্যাটের ইনপুট পাস করা হলে এই সমস্যা হয়।

যেমন, JavaScript নীতির মধ্যে ব্যবহৃত JSON.parse API-তে ইনপুট হিসেবে ভুল বা ত্রুটিপূর্ণ JSON পেলোড পাস করা হলে, আপনি এই সমস্যাটি পাবেন।

সমস্যার উত্তরের বডি

{
    "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"
        }
    }
}

ডায়াগনসিস

  1. JavaScript নীতি, এর সোর্স ফাইল, যে লাইন নম্বরে সমস্যা হয়েছে এবং সমস্যার বিবরণ শনাক্ত করুন। আপনি সমস্যার উত্তরের faultstring এলিমেন্টে এই সমস্ত তথ্য খুঁজে পাবেন। যেমন, নিম্নলিখিত faultstring-এ, জাভাস্ক্রিপ্ট নীতির নাম হল ParseJSONRequest, জাভাস্ক্রিপ্ট সোর্স ফাইল হল ParseJSONRequest.js, যে লাইন নম্বরে সমস্যা হয়েছে সেটি হল 2 এবং সমস্যার বিবরণ হল Unexpected token:

    "faultstring": "Execution of ParseJSONRequest failed with error: Javascript runtime error: \"SyntaxError: Unexpected token: <. (ParseJSONRequest.js:2)\""
    
  2. JavaScript সোর্স ফাইলের ২ নম্বর লাইন (উপরে #১ ধাপে শনাক্ত করা হয়েছে) পরীক্ষা করে দেখুন এবং কী অপারেশন পারফর্ম করা হচ্ছে তা চেক করুন। কোনও JSON.parse() ফাংশন এক্সিকিউট করা হলে, এতে পাস করা ইনপুট প্যারামিটার চেক করুন। ইনপুট প্যারামিটার সঠিক না হলে বা JSON ফর্ম্যাট ভুল হলে, এটিই হল সমস্যার কারণ।

    এই সমস্যার কারণ হতে পারে এমন একটি নমুনা জাভাস্ক্রিপ্ট কোড এখানে দেওয়া হল:

    var input = context.getVariable("request.content");
    var result = JSON.parse(input);
    

    এই উদাহরণে, API প্রক্সি সার্ভারে পাঠানো অনুরোধের পেলোড (request.content) 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 Proxy <city>Bangalore</city>-তে পাস করা হয়েছে। JSON.parse API-তে সঠিক JSON পাস করার কথা কিন্তু তার পরিবর্তে XML পেলোড পাস করা হয়েছে, তাই এটি নিম্নলিখিত সমস্যার কারণে কাজ করেনি:

    "Execution of ParseJSONRequest failed with error: Javascript runtime error: \"SyntaxError: Unexpected token: <. (ParseJSONRequest.js:2)\""
    

রেজোলিউশন

JavaScript কোডে ব্যবহৃত পার্স API-তে সঠিক ইনপুট পাস করতে ভুলবেন না।

উপরে আলোচনা করা নমুনা নীতি সংক্রান্ত সমস্যা সমাধান করতে, নিম্নলিখিতভাবে একটি সঠিক 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"
        }
    }
}

উদাহরণ ১: ভুল অবজেক্টে ফাংশন ইনভোক করা

আপনি যদি কাজ করে না এমন কোনও অবজেক্টে ফাংশন ইনভোক করার চেষ্টা করেন, তাহলে আপনি এই সমস্যাটি দেখতে পাবেন। যেমন, আপনি যদি কোনও নম্বরে 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"
        }
    }
}

ডায়াগনসিস

  1. 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() ফাংশন প্রয়োগ করছেন যার সংখ্যাগত ভ্যালু ১০০।

  2. JavaScript সোর্স ফাইল পরীক্ষা করে দেখুন যে আপনি toUpperCase() ফাংশনটি এমন কোনও অবজেক্টে ইনভোক করছেন কিনা যার সংখ্যাসূচক মান লাইন নম্বর ২-এ ১০০ (উপরে # ১ ধাপে শনাক্ত করা হয়েছে)। হ্যাঁ হলে, এটিই হল সমস্যার কারণ।

    এখানে একটি স্যাম্পেল জাভাস্ক্রিপ্ট সোর্স ফাইল দেওয়া হল যা এই সমস্যার কারণ:

    ConvertToUpperCase.js

    var number = 100;
    var result = number.toUpperCase();
    

    উপরে দেখানো জাভাস্ক্রিপ্ট কোডে, ভেরিয়েবল number-এর ভ্যালু ১০০ হিসেবে সেট করা হয়েছে। এরপরে, নম্বর অবজেক্টে 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();

উদাহরণ ২: কোনও অনির্দিষ্ট অবজেক্ট থেকে প্রপার্টি রিড করা যায় না

আপনি যদি কোনও অনির্দিষ্ট অবজেক্ট থেকে কোনও প্রপার্টি অ্যাক্সেস/পড়ার চেষ্টা করেন, তাহলে আপনি এই সমস্যাটি পাবেন। যেমন, আপনি কোনও অ্যারের অবজেক্ট থেকে ডেটা অ্যাক্সেস করার চেষ্টা করলে এই সমস্যা হতে পারে, কিন্তু অবজেক্টটি অনির্দিষ্ট। নিচে বিস্তারিত ব্যাখ্যা দেখুন।

সমস্যার উত্তরের বডির উদাহরণ

{
    "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"
        }
    }
}

ডায়াগনসিস

  1. 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 প্রপার্টিটি কোনও অনির্দিষ্ট অবজেক্ট থেকে পড়া যাচ্ছে না।

  2. JavaScript সোর্স ফাইলে (উপরে #১ ধাপে শনাক্ত করা হয়েছে) লাইন নম্বর পরীক্ষা করুন এবং অবজেক্টের কোনও সঠিক ভ্যালু আছে কিনা বা সেটি অনির্দিষ্ট কিনা তা যাচাই করুন। নির্দিষ্ট অবজেক্ট কীভাবে সংজ্ঞায়িত বা প্রাপ্ত করা হয়েছে তা নির্ধারণ করতে এবং অবজেক্টটি কেন অসংজ্ঞায়িত বলে মনে হচ্ছে তা নির্ধারণ করতে আপনাকে সম্পূর্ণ সোর্স ফাইলটি পড়তে এবং বুঝতে হতে পারে। আপনি যদি দেখেন যে নির্দিষ্ট অবজেক্টটি সত্যিই অনির্দিষ্ট এবং আপনি সেটির প্রপার্টি লেন্থ অ্যাক্সেস করার চেষ্টা করছেন, তাহলে এটিই সমস্যার কারণ।

    এই সমস্যাটি আরও ভালোভাবে বুঝতে একটি উদাহরণ দেখা যাক:

    1. ধরে নিন যে আপনি ব্যাকএন্ড সার্ভার থেকে নিম্নলিখিত JSON উত্তর পেয়েছেন:

      {
          "cars": [
             { "name":"Toyota", "count": 150 }
             { "name":"Honda", "count": 100 },
             { "name":"Ford", "count": 75 }
          ]
      }
      
    2. এখানে একটি স্যাম্পেল জাভাস্ক্রিপ্ট সোর্স ফাইল দেওয়া হল যা এই 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);
        }
      
    3. JavaScript কোডটি ভালভাবে পরীক্ষা করলে আপনি দেখতে পাবেন যে ২ নম্বর লাইনে, response.contentis-কে একটি সাধারণ স্ট্রিং (কোটে) হিসেবে jsonDataভেরিয়েবলে রিড/স্টোর করা হয়েছে।

    4. jsonData হল একটি রেগুলার স্ট্রিং, তাই jsonData থেকে cars অ্যাক্সেস করার চেষ্টা করলে (jsonData.cars) আনডিফাইনড হবে।

    5. এর পরে, আপনি যখন jsonData.cars থেকে length প্রপার্টি রিড করার চেষ্টা করেন, যা অনির্দিষ্ট, তখন আপনি এই সমস্যাটি দেখতে পান:

      "faultstring": "Execution of ParseJSONResponse failed with error: Javascript runtime error: \"TypeError: Cannot read property \"length\" from undefined. (ParseJSONResponse.js:6)\""
      

রেজোলিউশন

নিশ্চিত করুন যে আপনি প্রাসঙ্গিক JSON API ব্যবহার করে JSON ডেটা সবসময় JSON অবজেক্ট হিসেবে পড়ছেন।

উপরে বর্ণিত JavaScript-এর উদাহরণে থাকা সমস্যা সমাধান করতে, আপনি response.content অবজেক্টে JSON.parse() ফাংশন ব্যবহার করে এটিকে 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 সংক্রান্ত সমস্যা

আপনি URI ফাংশনে অবৈধ অক্ষর ব্যবহার করলে, URIError ধরনের সমস্যা হয়। যেমন, আপনি যদি decodeURI বা decodeURIComponent ফাংশনে শতাংশের চিহ্ন সহ URI পাস করেন, তাহলে আপনি এই সমস্যাটি পাবেন।

সমস্যার উত্তরের বডি

{
    "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"
        }
    }
}

ডায়াগনসিস

  1. 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)\""
    

    সমস্যার বিবরণে বলা হয়েছে যে URIDecode.js-এর ২ নম্বর লাইনে ভুল URI সিকোয়েন্স ব্যবহার করা হয়েছে।

  2. 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);