javascript تحميل هتمل مع فب-<سكريبت> رمز-section ينتهي فجأة-علة؟




تحميل برنامج light table (4)

لقد واجهت سلوك غريب جدا في فب-هتمل مختلطة التعليمات البرمجية. أنا باستخدام زامب 3.2.1 (فب 5.2.0) و إنتليج فكرة 14.1.

هذا هو ما يبدو رمز بلدي (تنقح لقراءة، إذا كنت بحاجة أكثر اسمحوا لي أن أعرف):

<?php
for($i=0; $i<count($stringArray); $i++) {
    $pieces = explode($GLOBALS['delimiter'], $lineData[$i]);
?>
    <div>
        ...
        <input id="<?php echo $pieces[$someValidNumber]; ?>_identifier" ...>
        ...
        <script>
            // some javascript with <?php echo $variable; ?>
        </script>
       ...
    </div>
<?php } ?>

ماذا يحدث عندما يتم تشغيل هذه الحلقة n مرات، وهذا ل n-1 كل شيء يبدو على ما يرام، ولكن في المدى n- ث، ضمن <script> -cection رمز توقف فجأة. ينتهي ملف هتمل بشكل صحيح مع إغلاق كافة العلامات.

هذا يبدو كما يلي (ن = 4):

$('input[id$="MegaSteel_tons"]').val(output2);
$('#MegaSteel_cart').prop(

أو (ن = 2):

$('input[id$="BarZwo_meters"]').val(output2);
$('#BarZwo_cart').prop('type', 'button').change

لاحظ أنه مع زيادة n، لا تحدث المحطة في وقت لاحق بطريقة حتمية. وهذا يعني عندما حاولت ن = 3، وكانت النتيجة أدناه:

$('input[id$="Bar_meters"]').val(output2);
$('#Bar_cart').prop('type', 'button').change();
var price

أنا في نهاية معرفتي. ما الذي يسبب هذا؟

كما طلب المزيد من التعليمات البرمجية:

$lineData = array();
$f = fopen('products.csv', 'r');
while (($line = fgetcsv($f)) !== false) {
    if (strpos($line[0], $productLine) !== false) {
        // the above produces single value arrays, thus we access them with [0]
        $pieces = explode($GLOBALS['delimiter'], $line[0]);
        $index = (int)$pieces[2];
        // todo: input must check that index is not already taken
        $lineData[$index-1] = $line[0];
    }
}
fclose($f);

ksort($lineData);

for ($i = 0; $i < count($lineData); $i++) {

    $pieces = explode($GLOBALS['delimiter'], $lineData[$i]);

    $prod_name = $pieces[0];
    $prod_lineNumber = $pieces[2];
    $prod_quantity = $pieces[3];
    $prod_tons = $pieces[4];
    $prod_meters = $pieces[5];
    $prod_pricePerTon = $pieces[6];

        ?>
        <p>
            <!-- User-Input-->
            <b> <?php echo $pieces[0]; ?></b> - <?php echo $prod_lineNumber; ?><br/>
            Units: <input id="<?php echo $prod_name; ?>_quantity" type="text">
            Tons: <input id="<?php echo $prod_name; ?>_tons" type="text">
            Meters: <input id="<?php echo $prod_name; ?>_meters" type="text">
            Price per ton: <?php echo $prod_pricePerTon; ?>
            Calculated price: <span id="<?php echo $prod_name; ?>_price">0</span>
            <input id="<?php echo $prod_name; ?>_cart"
                   type="hidden" value="Add to shopping cart!"
                   onclick="addToCart('<?php echo $prod_name; ?>')">
            <!-- Auto-Update-->
            <script>
                // first field - quantity
                $('input[id$="<?php echo $prod_name; ?>_quantity"]').on('keyup', function () {
                    var value = parseFloat($(this).val());
                    var output1 = value * <?php echo $prod_tons . " / " . $prod_quantity; ?>;
                    var output2 = value * <?php echo $prod_meters . " / " . $prod_quantity; ?>;
                    $('input[id$="<?php echo $prod_name; ?>_tons"]').val(output1);
                    $('input[id$="<?php echo $prod_name; ?>_meters"]').val(output2);
                    $('#<?php echo $prod_name; ?>_cart').prop('type', 'button').change();
                    var price = output1 * <?php echo $prod_pricePerTon; ?>;
                    $('#<?php echo $prod_name; ?>_price').text(price);
                });
                // second field - tons
                $('input[id$="<?php echo $pieces[0]; ?>_tons"]').on('keyup', function () {
                    var value = parseFloat($(this).val());
                    var output1 = value * <?php echo $prod_quantity . " / " . $prod_tons; ?>;
                    var output2 = value * <?php echo $prod_meters . " / " . $prod_tons; ?>;
                    $('input[id$="<?php echo $prod_name; ?>_quantity"]').val(output1);
                    $('input[id$="<?php echo $prod_name; ?>_meters"]').val(output2);
                    $('#<?php echo $prod_name; ?>_cart').prop('type', 'button').change();
                    var price = value * <?php echo $prod_pricePerTon; ?>;
                    $('#<?php echo $prod_name; ?>_price').text(price);
                });
                // third field - meters
                $('input[id$="<?php echo $pieces[0]; ?>_meters"]').on('keyup', function () {
                    var value = parseFloat($(this).val());
                    var output1 = value * <?php echo $prod_quantity . " / " . $prod_meters; ?>;
                    var output2 = value * <?php echo $prod_tons . " / " . $prod_meters; ?>;
                    $('input[id$="<?php echo $prod_name; ?>_quantity"]').val(output1);
                    $('input[id$="<?php echo $prod_name; ?>_tons"]').val(output2);
                    $('#<?php echo $prod_name; ?>_cart').prop('type', 'button').change();
                    var price = output2 * <?php echo $prod_pricePerTon; ?>;
                    $('#<?php echo $prod_name; ?>_price').text(price);
                });
            </script>
        </p>
    <?php
}
?>

والمحدد الذي يتم الوصول إليه من خلال المتغير العالمي هو ; . يتم تعريفه في ملف يسمى functions.php ، يتم تضمينه من خلال require_once("functions.php); في index.php (الكود أعلاه).

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

Foo;Steel;1;20;30;40;4500.3
Bar;Copper;2;20;30;40;4500.3
BarFoo;Steel;3;20;30;40;4500.3
FooBar;Steel;2;20;30;40;4500.3
FooBear;Steel;4;20;30;40;4500.3

نلاحظ أن المنتجات (فو، بار، ...) يتم تجميعها من قبل خطوط الإنتاج (الصلب والنحاس، ...) ومن ثم فرزها حسب الأرقام في العمود 3 (القيمة الثالثة في؛ الصفوف -seperated).

الوصول إلى echo $lineData[$i] مجموعة الصلب echo $lineData[$i] يبين ما يلي:

Foo;Steel;1;20;30;40;4500.3
FooBar;Steel;2;20;30;40;4500.3
BarFoo;Steel;3;20;30;40;4500.3

هذا هو كما هو متوقع بالضبط نفس كما في الملف يجري تحليلها.

تحديث: لا يؤدي التغيير إلى إصدار فب آخر (5.4 و 5.6) إلى حل المشكلة.

تحديث: في بويرشيل "C: \ زامب \ فب \ php.exe index.php | خارج ملف test.html" أنتج ملف هتمل، التي لم يكن لديك المشكلة المذكورة أعلاه. لذلك هناك حل بديل. وسوف هضم أكثر في إنتليج فكرة.

في هذه الأثناء أزلت أيضا علامات <p>...</p> التي لم تحل المشكلة.


ربما حاول إجراء شيء من هذا القبيل:

<?php
$body = 'your javasrcipr text';
for ($i = 0; $i<count($lineData); $i++) {
    print_r($body);
}?>

وتحقق مما يجعل إلى موقع الويب الخاص بك


for ($i = 0; $i < count($lineData)+1; $i++)

يجب أن تعطيك إشعار "تعويض غير محدد"، حاول استبدالها

for ($i = 0; $i < count($lineData); $i++)

أيضا، أعتقد أن لديك للتأكد من ذلك

$lineData[$index-1] = $line[0];

تنتج صفيف مع جميع الفهارس من 0 لحساب ($ لينداتا) -1


جرب إعداد error_reporting(E_ALL); و ini_set('display_errors', 1); في بيجينينغ من البرنامج النصي الخاص بك. قد يكون أن فب هو رمي خطأ وعدم إظهاره. مع هذه الأوامر عليك تفعيل الإبلاغ عن الخطأ وتظهر تلك الأخطاء.


هل تريد سمكة أو لتعلم الأسماك؟

"جعلها بسيطة، بسيطة قدر الإمكان، لا أكثر". A.Einstein

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

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

هذا هو جوابي الحقيقي.





intellij-idea