首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >调用PHP文件会使每次单击时发送的请求量加倍

调用PHP文件会使每次单击时发送的请求量加倍
EN

Stack Overflow用户
提问于 2017-05-25 23:39:22
回答 2查看 57关注 0票数 1

我有一个问题,这是导致我的网站上的许多滞后,因为呼叫的数量,而它应该只做一个。

因此,我有一个PHP文件,它显示了数据库中大量笔记的名称。

此文件为general_notes.php

代码语言:javascript
运行
复制
<div class="main-container-notes">
    <div id="left-box">
        <?php 

        echo "<div style='width: 100%;'>";

        // while ( $notename = "Excel Registers")
        while ( $noteName = sqlsrv_fetch_array( $resultNotes, SQLSRV_FETCH_ASSOC)) 
        {
            echo "<div class='hvr-bounce-to-right1 hover-cursor output noSelect' data-noteid='{$noteName['NoteID']}' style='width: 100%; border-right: 5px solid #00AA88; height: 50px;'>" . $noteName['NoteName'] . "</div>";
        }

        echo "</div>";
        ?>
    </div>
    <div id="right-box">
       <?php 

       if (isset($_SESSION['loggedin']) && $_SESSION['loggedin'] == true)  
       {
            // include 'noteContent.php'; 
       }

       ?>
    </div>
</div>

您将在回显中看到div有一个"output“类。然后在scripts.js中使用它

代码语言:javascript
运行
复制
$(".output").click(function () 
    {
        var noteid = $(this).data("noteid");
        var templatenoteid = $(this).data("templatenoteid");
        var variablenoteid = $(this).data("variablenoteid");
        console.log(noteid);

        if ($(this).data("noteid")) 
        {
            $("#right-box").load("noteContent.php", {noteid: noteid});
        }

        else if ($(this).data("templatenoteid")) 
        {
            $("#right-box").load("templateNoteContent.php", {templatenoteid: templatenoteid});
        }

        else
        {
            $("#right-box").load("variableContent.php", {variablenoteid: variablenoteid});
        }
    });

所以当它被点击的时候,它会使用这个php文件noteContent.php在右边的框中显示该注释的内容。

代码语言:javascript
运行
复制
<?php

    if (isset($_POST['noteid'])) 
    {
        $showNoteInfo = "SELECT Note, NoteName FROM Notes WHERE NoteID = " . $_POST['noteid'];
        $stmt = sqlsrv_query($conn, $showNoteInfo);
    }

    if (isset($_POST['noteid'])) 
    {
        if (empty($_POST['noteid'])) 
        {
            $notes = 'No Data';
        }
        if (sqlsrv_has_rows($stmt)) 
        {
            $data = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC);

            echo "<div class='custom-font title-container'>
                    <div class='expand-button-container fa fa-expand' onclick='expandWindow()'></div>
                    <div id='title-container1'><div class='edit-note fa fa-pencil' onclick='editGeneralNote()'>&nbsp;&nbsp;&nbsp;</div>" . $data['NoteName'] . "&nbsp;<div class='save-note fa fa-thumbs-up' onclick='saveGeneralNote(); submitNoteText();'></div></div>
                  </div>";
            echo "<textarea spellcheck='false' readonly id='ta1'>" . $data['Note'] . "</textarea>";
        } 
        else 
        {
            echo "No data found";
        }
    }
?>

<script type="text/javascript">

function submitNoteText()
{
    var noteid = <?php if(isset($_POST['noteid'])){ echo $_POST['noteid'];} ?>;
    var notetext = $("#ta1").val();
    var data = {noteid1: noteid, notetext1: notetext};

    if(noteid == ''||notetext == '')
    {
        alert("NoteID or Text is blank");
    }
    else
    {   
        $.ajax({
            type: "POST",
            url: "submitNoteText.php",
            dataType: 'json',
            data: data,
            cache: false,
            success: function(result){
                alert("Success");
            }
        });
    }
    return false;
};

</script>

但是,每次我单击以显示备注时,它都会显示该备注并进行此调用:

然而,我再次点击,它进行该调用的次数会加倍。

到第7次单击时,它已对noteContent.php进行了64次调用

为什么每次我点击笔记名称时,对noteContent.php的调用量都会加倍?

PS。我很抱歉,如果这不是最好的措辞,我不确定如何解释正在发生的事情,这也使得当我不确定要搜索什么时,搜索解决方案变得困难。

EN

回答 2

Stack Overflow用户

发布于 2017-05-25 23:52:42

这听起来像是一个事件绑定问题。可能是事件绑定多次发生(即多个事件绑定到同一个元素)。要避免这种情况,请考虑使用事件委派并在创建绑定之前调用.off()。如下所示:

代码语言:javascript
运行
复制
$(".main-container-notes").off('click.note-click').on('click.note-click', '.output', function () 
    ...
    // Other Code
    ...
});

注意click事件旁边的.note-click。这是一个事件命名空间。jQuery允许您提供事件名称空间,以便您可以删除特定事件,而无需删除所有附加的click事件。如果您有多个分配事件的插件或代码片段,这将非常有用。它可以防止你与其他功能发生冲突。

参考: .on().off()

票数 0
EN

Stack Overflow用户

发布于 2017-05-26 23:47:11

所以我想我应该更新这篇文章,因为它可能对其他人有帮助。

短篇小说: In noteContent.php I had <script type="text/javascript" src="scripts/scripts.js"></script>

一旦我取消了注释,它就不再是两倍的请求了。

我相信原因是:我仍然不确定,但我相信这是因为在scripts.js中,当它调用.load() noteContent.php时,它正在读取该php文件,并看到指向scripts.js的链接,然后再次读取它!

但是,在我的文件general_notes.php ( noteContent.php加载到的文件)中,已经有一个scripts.js引用,因此在noteContent.php中也不需要它。

我仍然在学习自己,所以我为缺乏术语和知识道歉,但希望这能帮助其他人谁正在加载一个php文件与脚本链接到另一个php文件,也有一个脚本链接。您只需要一个!:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44184495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档