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

गड़बड़ियों के टाइप और उनकी संभावित वजहें

JavaScript नीति की वजह से, कई तरह की स्क्रिप् ट एक्ज़ीक्यूशनविल् ड गड़बड़ियां हो सकती हैं. आम तौर पर देखी जाने वाली कुछ गड़बड़ियां नीचे टेबल में दी गई हैं:

गड़बड़ी का टाइप Cause
रेंज से जुड़ी गड़बड़ी अगर किसी ऐसी संख्या का इस्तेमाल किया जाता है जो मान्य वैल्यू की रेंज से बाहर है, तो RangeError गड़बड़ी का मैसेज दिखता है.
पहचान फ़ाइल से जुड़ी गड़बड़ी अगर किसी ऐसे वैरिएबल (रेफ़रंस) का इस्तेमाल किया जाता है जिसका एलान नहीं किया गया है, तो ReferenceError दिखती है.
सिंटैक्स में गड़बड़ी सिंटैक्स में गड़बड़ी वाले कोड का आकलन करने पर, SyntaxError गड़बड़ी का मैसेज दिखता है.
टाइप करने में गड़बड़ी अगर किसी ऐसे ऑपरेशन का इस्तेमाल किया जाता है जो उम्मीद के मुताबिक टाइप की रेंज से बाहर है, तो TypeError गड़बड़ी का मैसेज दिखता है.
यूआरआई से जुड़ी गड़बड़ी अगर यूआरआई फ़ंक्शन में गैर-कानूनी वर्णों का इस्तेमाल किया जाता है, तो URIError गड़बड़ी का मैसेज दिखता है.

रेंज से जुड़ी गड़बड़ी

गड़बड़ी का टाइप RangeError तब दिखता है, जब किसी वैल्यू पर कार्रवाई की जाती है या किसी फ़ंक्शन में ऐसी वैल्यू दी जाती है जो अनुमति वाली वैल्यू के सेट या रेंज में नहीं है.

उदाहरण के लिए, यह गड़बड़ी इन स्थितियों में आती है:

  1. अगर तारीख के कुछ एपीआई के साथ 31 सितंबर, 2018 जैसी अमान्य तारीख का इस्तेमाल किया जाता है.
  2. अगर आपने संख्या वाले तरीकों, जैसे कि Number.toPrecision(), Number.tofixed() या Number.toExponential() को अमान्य वैल्यू दी है. उदाहरण के लिए, मान लें कि आपने Number.toPrecision() तरीके में 400 या 500 जैसी बड़ी वैल्यू पास की है, तो आपको रेंज की गड़बड़ी दिखेगी.
  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"
        }
    }
}

ध्यान दें: रेंज से जुड़ी गड़बड़ियों का पता लगाने और उन्हें ठीक करने का तरीका, JavaScript नीति से मिलने वाले गड़बड़ी के सटीक मैसेज पर निर्भर करता है. आपकी जानकारी के लिए, यहां कुछ उदाहरण दिए गए हैं.

पहला उदाहरण: अमान्य तारीख

गड़बड़ी के रिस्पॉन्स बॉडी का उदाहरण

{
    "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 में, 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)\""
    
  2. ऊपर दिए गए पहले चरण में पहचानी गई JavaScript सोर्स फ़ाइल की जांच करें और देखें कि क्या गड़बड़ी में बताई गई लाइन नंबर में अमान्य तारीख का इस्तेमाल किया जा रहा है या लाइन नंबर में इस्तेमाल किए गए वैरिएबल में अमान्य तारीख है. अगर अमान्य तारीख का इस्तेमाल किया गया है, तो गड़बड़ी की यही वजह है.

    यहां एक JavaScript सोर्स फ़ाइल का सैंपल दिया गया है, जिसकी वजह से यह गड़बड़ी होती है:

    ParseDate.js

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

    इस उदाहरण में, लाइन नंबर 2 में वैरिएबल date का इस्तेमाल किया गया है. सोर्स फ़ाइल की जांच करने पर, आपको पता चलता है कि date वैरिएबल को अमान्य तारीख के साथ सेट किया गया है: 2018-09-31T11:19:08.402Z. यह तारीख अमान्य है, क्योंकि सितंबर में 31 दिन नहीं होते.

    ध्यान दें: इस उदाहरण में इस्तेमाल किया गया ISO-8601 फ़ॉर्मैट है: YYYY-MM-DDTHH:mm:ss.sssZ

रिज़ॉल्यूशन

पक्का करें कि JavaScript कोड में Date API का इस्तेमाल करते समय, हमेशा मान्य तारीख का इस्तेमाल किया जाए.

ऊपर दिए गए JavaScript कोड के उदाहरण को ठीक करने के लिए, तारीख को Sept 30 2018 के तौर पर सेट किया जा सकता है. इसके लिए, यहां दिया गया तरीका अपनाएं:

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

दूसरा उदाहरण: Precision APIs को अमान्य नंबर पास किया गया

गड़बड़ी के रिस्पॉन्स बॉडी का उदाहरण

{
    "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 में, 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)\""
    
  2. JavaScript सोर्स फ़ाइल की जांच करें (जिसकी पहचान ऊपर दिए गए पहले चरण में की गई है). अगर गड़बड़ी के ब्यौरे में बताई गई बड़ी संख्या का इस्तेमाल किसी खास लाइन नंबर में किया गया है, तो गड़बड़ी की वजह यही है.

    यहां एक JavaScript सोर्स फ़ाइल का सैंपल दिया गया है, जिसकी वजह से यह गड़बड़ी होती है:

    SetNumberPrecision.js

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

    इस उदाहरण में, ध्यान दें कि लाइन नंबर 2 में 400 की बड़ी वैल्यू का इस्तेमाल किया गया है. सटीक वैल्यू को इतने बड़े अंकों पर सेट नहीं किया जा सकता. इसलिए, आपको यह गड़बड़ी दिखती है:

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

संक्रमण की जांच

  1. 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)\""
    
  2. JavaScript सोर्स फ़ाइल में लाइन नंबर की जांच करें और पुष्टि करें कि ऊपर दिए गए पहले चरण में पहचाने गए, बिना वैल्यू वाले वैरिएबल का रेफ़रंस दिया जा रहा है या नहीं. उदाहरण के लिए, नीचे दिया गया JavaScript कोड, तीसरी लाइन में मौजूद ऐसे वैरिएबल का रेफ़रंस देता है जिसकी वैल्यू तय नहीं की गई है. यह वैरिएबल, गड़बड़ी की जानकारी देने वाली स्ट्रिंग में मौजूद वैरिएबल से मेल खाता है:price

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

सिंटैक्स गड़बड़ी

गड़बड़ी का SyntaxError टाइप तब दिखता है, जब JavaScript इंजन को ऐसे टोकन या टोकन का क्रम मिलता है जो भाषा के सिंटैक्स के मुताबिक नहीं होता. इसके अलावा, यह तब भी दिखता है, जब JSON/XML पार्स जैसे पार्स करने वाले एपीआई को अमान्य फ़ॉर्मैट का इनपुट दिया जाता है.

उदाहरण के लिए, अगर अमान्य या गलत फ़ॉर्मैट वाला JSON पेलोड, JavaScript नीति में इस्तेमाल किए जाने वाले JSON.parse एपीआई के इनपुट के तौर पर पास किया जाता है, तो आपको यह गड़बड़ी दिखती है.

गड़बड़ी के जवाब का मुख्य हिस्सा

{
    "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 में, 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 सोर्स फ़ाइल (ऊपर दिए गए पहले चरण में पहचानी गई) में लाइन नंबर 2 की जांच करें और देखें कि कौनसा ऑपरेशन किया जा रहा है. अगर कोई JSON.parse() फ़ंक्शन लागू किया जा रहा है, तो उसमें इस्तेमाल किए गए इनपुट पैरामीटर की जांच करें. अगर इनपुट पैरामीटर मान्य नहीं है या JSON में गड़बड़ी है, तो यह गड़बड़ी होने की वजह है.

    यहां एक सैंपल JavaScript कोड दिया गया है, जिसकी वजह से यह गड़बड़ी होती है:

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

    इस उदाहरण में, एपीआई प्रॉक्सी को पास किए गए अनुरोध पेलोड (request.content) का इस्तेमाल, JSON.parse() फ़ंक्शन के इनपुट के तौर पर किया जाता है.

    यहां एपीआई कॉल का सैंपल दिया गया है, जिसमें दिखाया गया है कि अनुरोध कैसे पास किया गया:

    curl -v "http://<org>-<env>.apigee.net/v1/js-demo" -H "Content-Type: application/json" -X POST -d '<city>Bangalore</city>'
    

    ऊपर दिए गए अनुरोध में, एपीआई प्रॉक्सी<city>Bangalore</city> को यह एक्सएमएल पेलोड भेजा गया है. JSON.parse एपीआई को मान्य JSON पास करने की उम्मीद होती है, लेकिन इसके बजाय XML पेलोड पास होने की वजह से, यह गड़बड़ी के साथ काम नहीं करता:

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

रिज़ॉल्यूशन

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

पहला उदाहरण: किसी गलत ऑब्जेक्ट पर फ़ंक्शन को लागू करना

अगर किसी ऐसे ऑब्जेक्ट पर फ़ंक्शन को ट्रिगर करने की कोशिश की जाती है जो काम नहीं करता, तो आपको यह गड़बड़ी दिखती है. उदाहरण के लिए, अगर किसी नंबर पर 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() फ़ंक्शन को ऐसे ऑब्जेक्ट पर लागू किया है जिसकी संख्यात्मक वैल्यू 100 है.

  2. JavaScript सोर्स फ़ाइल की जांच करें और पुष्टि करें कि क्या किसी ऐसे ऑब्जेक्ट पर toUpperCase() फ़ंक्शन का इस्तेमाल किया जा रहा है जिसकी संख्या वाली वैल्यू, लाइन नंबर 2 (ऊपर दिए गए चरण # 1 में तय की गई वैल्यू) में 100 है. अगर हां, तो गड़बड़ी की वजह यही है.

    यहां एक 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();

दूसरा उदाहरण: किसी तय नहीं किए गए ऑब्जेक्ट से प्रॉपर्टी नहीं पढ़ी जा सकती

अगर किसी ऐसे ऑब्जेक्ट से प्रॉपर्टी को ऐक्सेस/रीड करने की कोशिश की जाती है जिसकी जानकारी नहीं दी गई है, तो आपको यह गड़बड़ी दिखती है. उदाहरण के लिए, यह गड़बड़ी तब हो सकती है, जब किसी ऐरे में मौजूद ऑब्जेक्ट से डेटा ऐक्सेस करने की कोशिश की जाए, लेकिन ऑब्जेक्ट की वैल्यू तय न की गई हो. इस बारे में ज़्यादा जानकारी यहां देखें.

गड़बड़ी के रिस्पॉन्स बॉडी का उदाहरण

{
    "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 में बताया गया है) और पुष्टि करें कि ऑब्जेक्ट का कोई मान्य मान है या उसके बारे में कोई जानकारी नहीं है. आपको पूरी सोर्स फ़ाइल को पढ़कर यह समझना पड़ सकता है कि किसी खास ऑब्जेक्ट को कैसे तय किया गया या कैसे बनाया गया. साथ ही, यह भी पता करना पड़ सकता है कि ऑब्जेक्ट को 'तय नहीं किया गया' क्यों माना गया. अगर आपको लगता है कि कोई ऑब्जेक्ट वाकई में तय नहीं किया गया है और आपने उससे प्रॉपर्टी की लंबाई ऐक्सेस करने की कोशिश की है, तो गड़बड़ी की वजह यही है.

    इस समस्या को बेहतर तरीके से समझने के लिए, एक उदाहरण देखें:

    1. मान लें कि आपको बैकएंड सर्वर से यह JSON रिस्पॉन्स मिलता है:

      {
          "cars": [
             { "name":"Toyota", "count": 150 }
             { "name":"Honda", "count": 100 },
             { "name":"Ford", "count": 75 }
          ]
      }
      
    2. यहां एक 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);
        }
      
    3. JavaScript कोड को ध्यान से देखने पर पता चलता है कि लाइन नंबर 2 में, response.content को वैरिएबल 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 एपीआई का इस्तेमाल करके, 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);
}

यूआरआई से जुड़ी गड़बड़ी

यूआरआई फ़ंक्शन में गैर-कानूनी वर्णों का इस्तेमाल करने पर, गड़बड़ी का URIError टाइप दिखता है. उदाहरण के लिए, अगर आपने 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"
        }
    }
}

संक्रमण की जांच

  1. JavaScript नीति, उसकी सोर्स फ़ाइल, उस लाइन नंबर की पहचान करें जहां गड़बड़ी हुई है, और गड़बड़ी के बारे में जानकारी दें. आपको यह सारी जानकारी, गड़बड़ी के जवाब के फ़ॉल्टस्ट्रिंग एलिमेंट में मिल सकती है. उदाहरण के लिए, यहां दी गई फ़ॉल्ट स्ट्रिंग में, 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 की लाइन नंबर 2 में, गलत तरीके से लिखे गए यूआरआई का इस्तेमाल किया गया है.

  2. JavaScript सोर्स फ़ाइल की जांच करें और पुष्टि करें कि यूआरआई फ़ंक्शन में दिए गए आर्ग्युमेंट में कोई गैर-कानूनी वर्ण तो नहीं है. अगर हां, तो यह गड़बड़ी की वजह है.

    यहां एक JavaScript सोर्स फ़ाइल का उदाहरण दिया गया है, जो यह गड़बड़ी पैदा करती है:

    URIDecode.js

    var str = "75%-Completed";
    var decoded_str = decodeURIComponent(str);
    context.setVariable("decoded_str", decoded_str);
    

    ऊपर दिए गए JavaScript कोड के उदाहरण में, decodeURIComponent() में पास किए गए वैरिएबल str में प्रतिशत का चिह्न है, जिसे गैर-कानूनी वर्ण माना जाता है. इसलिए, आपको गड़बड़ी का यह मैसेज मिलता है:

    "Execution of URIDecode failed with error: Javascript runtime error: \"URIError: Malformed URI sequence. (URIDecode.js:2)\""
    

रिज़ॉल्यूशन

पक्का करें कि यूआरआई फ़ंक्शन में इस्तेमाल किए गए सभी वर्ण, कानूनी हों और जिनका इस्तेमाल किया जा सकता हो.

ऊपर दिए गए JavaScript उदाहरण से जुड़ी समस्या को ठीक करने के लिए, प्रतिशत के सिंबल को कोड में बदलें. उदाहरण के लिए, %25:

var str = "75%25-Completed";
var decoded_str = decodeURIComponent(str);
context.setVariable("decoded_str", decoded_str);