يعمل البرنامج النصي ColdFusion البسيط في IE ولكن لا يعمل في Firefox؟

StackOverflow https://stackoverflow.com/questions/138607

سؤال

لدي جزء بسيط جدًا من البرنامج النصي الذي يغير حالة عنصر في قاعدة بيانات MySql - إنه يعمل بشكل جيد في IE7، ولكن إذا جربته في Firefox، يبدو أنه يعمل، لكنه لم يعمل...وهو أمر غريب للغاية.

الكود بسيط للغاية - أولاً أحصل على تفاصيل السجل الذي أبحث عنه:

<cfscript>
// Get the Product Attribute details
Arguments.qGetProductAttribute = Application.cfcProducts.getProductAttributes(Arguments.iProductAttributeID);
</cfscript>

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

<!--- If Product Attribute is active, mark as inactive --->
<cfif Arguments.qGetProductAttribute.bActive EQ 0>
    <cfquery name="qChangeStatus" datasource="#Request.sDSN#">
    UPDATE  tblProductAttributes
    SET     bActive = <cfqueryparam value="1" cfsqltype="CF_SQL_INTEGER" maxlength="1" />
    WHERE   iProductAttributeID = <cfqueryparam value="#Arguments.iProductAttributeID#" cfsqltype="CF_SQL_INTEGER" />;
    </cfquery>

<!--- Else if Product Attribute is inactive, mark as active --->
<cfelseif Arguments.qGetProductAttribute.bActive EQ 1>
    <cfquery name="qChangeStatus" datasource="#Request.sDSN#">
    UPDATE  tblProductAttributes
    SET     bActive = <cfqueryparam value="0" cfsqltype="CF_SQL_INTEGER" maxlength="1" />
    WHERE   iProductAttributeID = <cfqueryparam value="#Arguments.iProductAttributeID#" cfsqltype="CF_SQL_INTEGER" />;
    </cfquery>
</cfif>

لا أرى أي سبب على الإطلاق لعدم نجاح هذا الأمر...وبالفعل، في IE7 يعمل بشكل مثالي ...

ما يحدث هو أنه بعد تشغيل هذا البرنامج النصي، يعود المتصفح إلى الصفحة التي تعرض كل هذه السجلات.لكل سجل إذا تم تعيين الحقل "bActive" على "1"، فسوف يعرض كلمة "Active" وإذا تم تعيينه على "صفر"، فسيتم عرض "Disabled".بسيطا بما فيه الكفاية.

إذا قمت بتشغيل البرنامج النصي لتعطيل أحد السجلات، فسيعرض Firefox فعليًا كلمة "معطل" كما هو متوقع، لكن سجل قاعدة البيانات لا يتغير!

أنا في حيرة...كيف يمكن أن يعمل الكود من جانب الخادم بشكل جيد في متصفح واحد وليس في متصفح آخر؟!

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

المحلول 2

لقد وجدت سبب المشكلة..فايربوغ.

ليس لدي أدنى فكرة عما يعتقد Firebug أنه يفعله، إذا قمت بإزالة علامة "cflocation" من البرنامج النصي (التي تعيد المستخدم إلى صفحة الملخص)، فسوف يعمل بشكل جيد.ولكن إذا احتفظت بها، يبدو أن Firebug يقوم بتشغيل الوظيفة مرة أخرى قبل إعادة توجيه المتصفح إلى صفحة الملخص.

ليس هناك سبب للقيام بذلك.غير دموي قابل للتصديق.

على الأقل لن يحدث ذلك على أجهزة العملاء.

نصائح أخرى

هل أنت متأكد بنسبة 100% من أن سجل قاعدة البيانات لا يتغير؟يمكن أن يحدث هذا التأثير إذا استدعى Firefox البرنامج النصي مرتين، مرة قبل عرض الصفحة ومرة ​​بعد ذلك.

لذلك يتم ضبط المنتج على معطل، ثم بعد إرسال الصفحة إلى المتصفح، يتم تحديثها مرة أخرى (ونظرًا لأنه معطل بالفعل، تتم إعادة تمكينه).

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

يحرر:ردًا على التعليقات أدناه، سيكون الحل السريع + القذر هو التحقق من الطابع الزمني للتحديث الأخير أولاً وإذا كان خلال n ثانية من الوقت الحالي، فارفض التحديث.

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

الكود الذي نشرته ليس هو سبب الخطأ لأنه كله كود من جانب الخادم - لا يحدث أي شيء للعميل هناك.

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

أعتقد أنه عند استخدام Firefox، لا يتم استدعاء كتلة التعليمات البرمجية التي تحتوي على الاستعلامات.

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

على مستوى الظل قليلاً، يمكنك التخلص من الحاجة إلى عبارة if على الإطلاق من خلال القليل من العمليات الحسابية البسيطة.

<cfquery name="qChangeStatus" datasource="#Request.sDSN#">
    UPDATE  tblProductAttributes
    SET
         bActive = <cfqueryparam value="#val(1 - Arguments.qGetProductAttribute.bActive)#" cfsqltype="CF_SQL_INTEGER" maxlength="1" />
    WHERE   
        iProductAttributeID = <cfqueryparam value="#Arguments.iProductAttributeID#" cfsqltype="CF_SQL_INTEGER" />;
</cfquery>

حاول إزالة الفاصلة المنقوطة في نهاية عبارات WHERE في كود SQL الخاص بك.

WHERE   iProductAttributeID = <cfqueryparam value="#Arguments.iProductAttributeID#" cfsqltype="CF_SQL_INTEGER" />;

كل تلك الإجابات المختلفة، ولم ينجح أي منها بالنسبة لي.اضطررت للذهاب إلى منتدى آخر حيث قال أحدهم إن Skype Extension Addon في Firefox هو الذي يتسبب في جنون قواعد بيانات ColdFusion أو عدم عملها.لقد قمت بإلغاء تثبيت ملحق Skype (شكرًا لك، Skype) وعاد كل شيء إلى طبيعته.نأمل أن يعمل هذا لشخص آخر أيضا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top