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

نوع الخطأ السبب
خطأ في النطاق يتم عرض RangeError إذا استخدمت رقمًا خارج نطاق القيم القانونية.
خطأ في المرجع يتم عرض ReferenceError إذا استخدمت (المرجع) متغيرًا لم يتم تعريفه.
خطأ في البنية يتم عرض 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

درجة الدقّة

تأكَّد من استخدام تاريخ صالح دائمًا أثناء استخدام واجهات برمجة التطبيقات Date API في رمز JavaScript.

لإصلاح مثال رمز JavaScript الموضّح أعلاه، يمكنك ضبط التاريخ على أنّه Sept 30 2018 كما هو موضّح أدناه:

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

المثال 2: تم تمرير رقم غير صالح إلى 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 (الذي تم تحديده في الخطوة رقم 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 API تمرير 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);
}

خطأ في معرّف الموارد المنتظم (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"
        }
    }
}

التشخيص

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

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

درجة الدقّة

تأكد من أن جميع الأحرف المستخدمة في وظائف معرف الموارد المنتظم (URI) قانونية ومسموح بها.

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

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