تحديد وحلّ المشاكل المتعلقة بأخطاء وقت تشغيل سياسة JavaScript

أنت تطّلع على مستندات 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 في حال استخدام أحرف غير صالحة في دالة معرّف الموارد المنتظم.

خطأ في النطاق

يتم طرح نوع الخطأ RangeError عند إجراء عملية على قيمة أو تمرير قيمة إلى دالة ليست ضمن مجموعة أو نطاق القيم المسموح بها.

على سبيل المثال، يحدث هذا الخطأ في الحالات التالية:

  1. في حال استخدام تاريخ غير صالح، مثل 31 أيلول (سبتمبر) 2018، مع بعض واجهات برمجة تطبيقات التاريخ.
  2. إذا قمت بتمرير قيمة غير صالحة إلى طرق رقمية مثل Number.toPrecision() أو Number.tofixed() أو Number.toExponential(). على سبيل المثال، لنفترض أنك مررت قيمة كبيرة مثل 400 أو 500 في الطريقة 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"
        }
    }
}

ملاحظة: يعتمد تشخيص أخطاء النطاق وحلّها على رسالة الخطأ الدقيقة التي ظهرت في سياسة 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"
        }
    }
}

التشخيص

  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 المصدر (الذي تم تحديده في الخطوة 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"
        }
    }
}

التشخيص

  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 المصدر (الذي تم تحديده في الخطوة 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"
        }
    }
}

التشخيص

  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 المصدر وتحقَّق مما إذا كانت الإحالة إلى المتغيّر غير المحدَّد المحدّد في الخطوة رقم 1 أعلاه. على سبيل المثال، يشير رمز JavaScript التالي إلى المتغير غير المحدّد price في السطر 3، والذي يتطابق مع ما في سلسلة الخطأ:

    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 غير صالحة أو مكتوبة بشكل غير صحيح كإدخال إلى واجهة برمجة تطبيقات JSON.parse المُستخدَمة في سياسة 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"
        }
    }
}

التشخيص

  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. راجِع السطر رقم 2 في ملف JavaScript المصدر (الذي تم تحديده في الخطوة رقم 1 أعلاه) وتحقّق من العملية التي يتم تنفيذها. إذا كان يتم تنفيذ دالة 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>'
    

    في الطلب أعلاه، يتم تمرير الحمولة التالية بتنسيق XML إلى وكيل واجهة برمجة التطبيقات <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"
        }
    }
}

المثال 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"
        }
    }
}

التشخيص

  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() على عنصر قيمته الرقمية 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"
        }
    }
}

التشخيص

  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 هي سلسلة عادية، لن يتم تعريفك عند محاولة الوصول إلى cars من jsonData (jsonData.cars).

    5. بعد ذلك، عند محاولة قراءة السمة 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 ذات الصلة.

لحلّ مشكلة نموذج 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);
}

خطأ في عنوان URL

يتم عرض نوع الخطأ 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"
        }
    }
}

التشخيص

  1. حدِّد سياسة 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)\""
    

    يشير وصف الخطأ إلى أنّه تم استخدام تسلسل عنوان URL بتنسيق غير صحيح في السطر رقم 2 من URIDecode.js.

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