我有一个问题,这是导致我的网站上的许多滞后,因为呼叫的数量,而它应该只做一个。
因此,我有一个PHP文件,它显示了数据库中大量笔记的名称。
此文件为general_notes.php
<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
中使用它
$(".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
在右边的框中显示该注释的内容。
<?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()'> </div>" . $data['NoteName'] . " <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。我很抱歉,如果这不是最好的措辞,我不确定如何解释正在发生的事情,这也使得当我不确定要搜索什么时,搜索解决方案变得困难。
发布于 2017-05-25 15:52:42
这听起来像是一个事件绑定问题。可能是事件绑定多次发生(即多个事件绑定到同一个元素)。要避免这种情况,请考虑使用事件委派并在创建绑定之前调用.off()
。如下所示:
$(".main-container-notes").off('click.note-click').on('click.note-click', '.output', function ()
...
// Other Code
...
});
注意click
事件旁边的.note-click
。这是一个事件命名空间。jQuery允许您提供事件名称空间,以便您可以删除特定事件,而无需删除所有附加的click
事件。如果您有多个分配事件的插件或代码片段,这将非常有用。它可以防止你与其他功能发生冲突。
发布于 2017-05-26 15: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文件,也有一个脚本链接。您只需要一个!:)
https://stackoverflow.com/questions/44184495
复制