سؤال

لقد قمت مؤخرا في قيام بعض JavaScript عبر المجال باستخدام JSONP و ASP.NET MVC.

سيستجيب إجراء وحدة التحكم المعينة فقط لطلب النشر، وهذا حسب التصميم.

في IE8، أستطيع أن أرى (عبر fiddler2) أن الاستجابة صحيحة، وإرجاع استجابة HTTP 200، جنبا إلى جنب مع JSONP JavaScript.

في Firefox، Safari و Chrome، لا يزال الاستجابة قيد الإعادة، مع محتوى رمز HTTP 200 المناسب ومحتوى JSONP، الفرق الوحيد هو أن كائن XMLHTPRequest الذي يستخدمه JQuery هو إعداد رمز الحالة إلى 0، والمسؤولية الفارغة.

في الأصل، اعتقدت أن هذا بسبب COR HTTP Rephariaring (التحكم في الوصول HTTP)، حيث كان رأس مخصص أو نوع محتوى غير نص / عادي سيؤدي إلى إرسال طلب HTTP إضافي (مع خيارات) ليتم إرساله إلى الخادم. أستطيع أن أرى في fiddler2 أن طلب الخيارات يجري الاستجابة له مع HTTP 404.

خادم الويب هو IIS7 (ولكن خادم الويب الإنتاج سيكون مربع IIS6). في IIS7، أستطيع أن أرى OptionSverbhandler القياسية المدرجة في المعالجين، لكنني لست مقتنعا أن هذا يفعل شيئا فعليا (في الواقع، لا أستطيع حتى العثور على أي وثائق حول Optionsverbhandler في أي مكان).

للحصول على جولة هذا، قمت بتعديل مكتبة مسج لعدم تعيين رأس مخصص، وتغيير نوع المحتوى إلى النص / عادي بدلا من التطبيق / JSON، ويبدأ Firefox أخيرا تجاوز طلب الخيارات، ومشاركات عادية.

لا تزال المشكلة تكمن في استجابة فارغة (وفقا لكائن XMLHTTPRECEEST)، على الرغم من أن Fiddler2 يدل على أن استجابة HTTP 200 الناجحة، يتم إرجاع المحتوى.

أي مساعدة؟

هل كانت مفيدة؟

المحلول

اتضح، لا يمكنك استخدام مكالمات المجال عبر المجال باستخدام JQuery باستخدام Post (مما يجعل المنطقي، لأنه يجعل علامة البرنامج النصي لإجراء المكالمة). التبديل للحصول على مرتبة المشكلة، والآن يتم إرجاع كل شيء بشكل صحيح.

كان على المشي من خلال مصدر مسج لمعرفة أن واحد خارج، ولكن شكرا على الرد.

غير لامع

نصائح أخرى

جرب استخدام Firebug. في فايرفوكس لرؤية الطلب الفعلي الذي يتم إرساله. تحقق من علامة التبويب صافي لرؤية طلب HTTP والاستجابة. ربما شيء غير صحيح؟ أنا كذلك أستعمل jsonview. في Firefox لعرض بيانات JSON التي تحدد MICHCAITON / JSON MIMIETYPE. للأسف أنه لا يتعامل مع JSONP، ولكن قريبته.

بخلاف كل الأخطاء الواضحة على جانب العميل، السبب الرئيسي لهذا هو أن محرك أبو بريص يبحث عن Access-Control-Allow-Origin في رأس من servlet. وبعد إذا لم تجد ذلك، فسوف يقوم بإحباط الاتصال وتحصل على status=0 و statusText=null. وبعد أيضا، moz-nullprincipal في خطأ في تحليل XML. كل هذه الأشياء مضللة للغاية. كل ما تحتاجه لحل هذه المشكلة هو:

response.setHeader("Access-Control-Allow-Origin","*");

في ال servlet الرمز والحياة سيكون جيدا :-)

في الواقع ليس الحال. يرسل فايرفوكس رأس الخيار مثل ما يلي:

هنا هو ما يحصل عليه العميل في Firefox:

خيارات / mvcapplication / json / test1 http / 1.1 المضيف: ACOHENI580 وكيل المستخدم: Mozilla / 5.0 (Windows؛ U؛ Windows NT 6.1؛ EN-US؛ RV: 1.9.2.8) Gecko / 20100722 Firefox / 3.6.8 اقبل: نص /html application/xhtml + xmllapplication/xml؛q=0.9 ،*/*؛q=0.8 قبول اللغة: en-us، en؛ q = 0.5 قبول الترميز: gzip، dyplate قبول charset: iso- 8859-1، UTF-8؛ q = 0.7، *؛ Q = 0.7 الاحتفاظ على قيد الحياة: 115 اتصال: HTTP-al

لا يعرف MVC كيفية التعامل مع هذا لأنه يبحث فقط عن رأس آخر عند استخدام السمة [HttpPost]

للسماح يدويا هذا:

//[HttpPost]
[AcceptVerbs(new string[] {"POST","OPTIONS"})]
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top