Angular.js: خدمة $ http لا يتم استدعاء خطأ رد الاتصال على 400

تم إنشاؤها على ٨ مايو ٢٠١٣  ·  26تعليقات  ·  مصدر: angular/angular.js

الإصدار: 1.1.4.1

createNewWall: function(wall, successCallback, errorCallback) {
    return $http.post($rootScope.baseAppsAPI + '/walls', null, {
       params: wall
    }).success(function(data, status) {
       return successCallback.call(this, data);
    }).error(function(data) {
       return errorCallback.call(this, data);
    });
}

لقد تحققت من أن وظيفة الزاوية isSuccess تعمل بشكل صحيح. لقد قمت بذلك عن طريق إضافته إلى كائن النافذة والتحقق من أن الكود أدناه (الذي تم وضعه في رد الاتصال الخاص بي) أدى إلى استدعاء رد الاتصال بالخطأ.

if (window.isSuccess(status)) {
   return successCallback.call(this, data);
} else {
  return errorCallback.call(this, data);
}

أي فكرة عن سبب المشكلة؟ هل حدث خطأ ما بشأن عدم رفض / حل وعود $ http بشكل صحيح؟

التعليق الأكثر فائدة

بالنسبة لي ، نجح رد @ lsiv568 في تنفيذ الحيلة. إنه أمر غريب في البداية ولكن عليك إعادة الوعد المرفوض يدويًا عند إنشاء معترض خطأ ( مصدر ).

.factory('myInterceptor', function($q) {
  return {
    response: function (response) { return response; },
    responseError: function(response) {
      // do stuff or
      return $q.reject(response);
    }
  };
});

ال 26 كومينتر

أواجه نفس المشكلة. قد تعني الطريقة التي أغلقت بها المشكلة أنه يمكنني القيام بشيء خاطئ وما إلى ذلك. هل يمكنك مشاركة الحل الخاص بك من فضلك؟ لا يمكن العثور على هذا في أي مكان.

روبرت. ،

لقد أغلقت القضية لأن المشكلة اختفت (بأعجوبة) بعد
إجراء بعض التعديلات على خدمتي. ومع ذلك ، يبدو أنه يعود
بشكل متقطع. لذلك ، لم أعد أعرف ما إذا كانت مشكلة من طرفي أم لا
مشكلة حقيقية مع الزاوي. إذا أردت ، يمكنني إعادة فتح المشكلة ويمكنك ذلك
أضف مشكلتك إليها؟ هل هذا مناسب لك؟

في يوم الاثنين ، 13 مايو 2013 ، الساعة 9:13 صباحًا ، كتب Robert [email protected] :

أواجه نفس المشكلة. الطريقة التي أغلقت بها المشكلة قد تعني أنني
يمكن أن تفعل شيئًا خاطئًا وما إلى ذلك. هل يمكنك مشاركة الحل الخاص بك من فضلك؟ لا يمكن
تجد هذا في أي مكان.

-
قم بالرد على هذه الرسالة الإلكترونية مباشرة أو tHubhttps: //github.com/angular/angular.js/issues/2609#issuecomment -17810417
.

باحترام،

لويس دبليو سيفيلو

كما هو مذكور أعلاه ، أقوم بإعادة فتح هذه المشكلة لأنها تحدث بشكل متقطع. rtpm ، يرجى تضمين حالة الاستخدام الخاصة بك / أي معلومات إضافية قد تساعد في تحديد المشكلة

روبرت ،
شكرا لإرسال هذا على طول.

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

شكرا جزيلا لكم يا رفاق. كان لي نفس المشكلة.

+1 يحدث لي عندما يعيد الخادم 401

+1
وظيفة رد الاتصال لا تعمل بينما يقوم الخادم بإرجاع رمز الحالة 401.

أي تقدم في هذا؟ تواجه نفس المشكلة مع 400.

بالنسبة لي ، نجح رد @ lsiv568 في تنفيذ الحيلة. إنه أمر غريب في البداية ولكن عليك إعادة الوعد المرفوض يدويًا عند إنشاء معترض خطأ ( مصدر ).

.factory('myInterceptor', function($q) {
  return {
    response: function (response) { return response; },
    responseError: function(response) {
      // do stuff or
      return $q.reject(response);
    }
  };
});

تواجه نفس المشكلة مع 400 ..
ولكن لماذا تم إغلاق القضية ، وهل هناك حل محدد لهذه المشكلة؟

أواجه أيضًا هذه المشكلة بالخطأ 400. هل تم حل هذه المشكلة؟ إذا كان الأمر كذلك ، في أي إصدار؟

أواجه نفس المشكلة مع جميع الأخطاء> 299. أنا أستخدم Restangular مع اعتراض استجابة مخصص ، لكني أتلقى الخطأ مع خدمة http $ خارج الصندوق ، باستثناء رأس رمز CSRF المميز. (حاولت رفض الكائن المؤجل من داخل Restangular يدويًا على أي حال ، ولكن كما هو متوقع لم يغير ذلك أي شيء.)

أواجه هذه المشكلة أيضًا ، فهل يمكننا إعادة فتحها؟

كانت المشكلة التي تم الإبلاغ عنها في المشكلة الأصلية بسبب اعتراض مخصص لا يتعامل مع ظروف الخطأ بشكل صحيح (لم يتم رفض الوعد). إذا استمر شخص ما في مواجهة مشكلة ، فمن المحتمل أن يكون نفس الموقف - يرجى التحقق من عدم وجود أجهزة اعتراض مخصصة لعربات التي تجرها الدواب. إذا كنت لا تزال تعتقد أن شيئًا ما ليس صحيحًا تمامًا من جانب AngularJS ، فيرجى تقديم سيناريو _حد أدنى ، مباشر _ إعادة إنتاج (بشكل مثالي باستخدام http://plnkr.co/ ولكن أي أداة أخرى مماثلة ستفي بالغرض).

@ pkozlowski-openource شكرًا ، يمكنني بالفعل أن أؤكد أن هذه كانت مشكلتي (d'oh).

يجب أن تكون هناك ملاحظة في مستندات Angular بخصوص هذا - لم يكن لدي أي فكرة أنني كنت أتجاوز تمامًا سلوك الوعد $ http الذي ينفذ المعترض الخاص بي.

لقد واجهت أيضًا هذه المشكلة وكان لدي معترض نظرت إليه مرارًا وتكرارًا لأنه كان لديه بالفعل العائد الصحيح. لقد وجدت الجاني أخيرًا. إذا كنت تستخدم استدعاءات متعددة للنجاح / الخطأ أو فعليك التأكد من أنها تعيد الشيء الصحيح أيضًا :) يجب أن تعيد عمليات رد النداء الناجحة الاستجابة المعدلة بينما يجب أن تعيد عمليات الاستدعاء الخطأ رفضًا باستخدام $ q.reject تمامًا مثل المعترض.

+1 شكرا رفاق. واجهت نفس المشكلة مع التخصيص العالمي لـ http.interceptor $

+1 لإجابةchmanie . شكرا جزيلا! تم إصلاح مشكلتنا.

+1 شكرا chmanie! أصلحت مشكلتي أيضًا

+1 شكرًا ، لقد أصلح الرفض لي!

+1. شكرًا على حل مشكلتي.

+1 شكرًا ، لقد أصلح الرفض لي!

حل chmanie يناسبني.

حل @ chmanie حل المشكلة. يجب أن تكون هناك ملاحظة بخصوص هذا في مستندات Angularjs.

@ chmanie شكرا لك ~

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات