تحديد وحلّ المشاكل المتعلقة بأخطاء وقت تشغيل سياسة 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 إلى حدوث العديد من الأنواع المختلفة من أخطاء ScriptExecutionFound (تعذّر تنفيذ النص البرمجي). تم سرد بعض الأخطاء الأكثر شيوعًا في الجدول أدناه:

نوع الخطأ السبب
خطأ في النطاق يتم عرض RangeError إذا كنت تستخدم رقمًا خارج نطاق القيم القانونية.
خطأ في المرجع يتم عرض ReferenceError إذا كنت تستخدم (reference) متغيّرًا لم يتم تعريفه.
خطأ في البنية يتم طرح SyntaxError إذا حاولت تقييم رمز يتضمّن خطأ في البنية.
خطأ في الكتابة يتم طرح خطأ TypeError في حال استخدام عملية خارج نطاق الأنواع المتوقّعة.
خطأ في معرف الموارد المنتظم (URI) يتم عرض URIError إذا كنت تستخدم أحرفًا غير مقبولة في إحدى وظائف معرّف الموارد المنتظم (URI).

خطأ في النطاق

يحدث نوع الخطأ 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

الدقة

تأكَّد من استخدام تاريخ صالح دائمًا أثناء استخدام واجهات برمجة تطبيقات التاريخ في رمز 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 الموضّح أعلاه، اضبط عدد الأرقام المعنوية على رقمَين صالحَين:

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 في الحالات التالية:

  • إذا كان الم Operand أو الوسيطة التي تم تمريرها إلى دالة غير متوافقَين مع النوع المتوقّع من عامل التشغيل أو الدالة
  • يتم استدعاء دالة على كائن فارغ أو غير محدد أو غير صحيح.
  • يتم الوصول إلى الخاصية من كائن فارغ أو غير محدد أو غير صحيح.

على سبيل المثال، حدث خطأ في النوع:

  • إذا حاولت استدعاء الدالة 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)\""
    

    يشير وصف الخطأ إلى أنه يتم استخدام تسلسل معرف موارد منتظم (URI) مكتوب بشكل غير صحيح في السطر رقم 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)\""
    

الدقة

تأكَّد من أنّ جميع الأحرف المستخدَمة في دوال عناوين URL قانونية ومسموح بها.

لحلّ المشكلة في مثال JavaScript الموضّح أعلاه، استخدِم ترميز رمز النسبة المئوية. على سبيل المثال، %25:

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