JavaScript函数在使用header()后不会运行,但如果不使用header()(在php中)则会运行

时间:2017-06-22 18:45:36

标签: javascript php html

如果我的问题标题令人困惑,我道歉,这是我的第一篇文章,尽管阅读https://stackoverflow.com/help/on-topic我觉得我的问题写作能力仍然存在一些缺陷。

TL; DR:如果我不使用header("location: ProjectUserProfile.php?UploadSuccessful"),则JavaScript动画可以正常工作,但如果我这样做(并且我需要),则不会。有什么理由或解决方案吗?

反正

上下文: 我有一个嵌入在php文档中的html表单,用于上传图像,删除图像等。

主代码发生在ProjectUserProfile.php上(并且工作正常),在上传图像后,我使用header("location: ProjectUserProfile.php?UploadSuccessful")返回页面,并提示刷新。

问题: 如果我不使用header("location: ProjectUserProfile.php?UploadSuccessful"),图像将不会改变等,所以我必须使用它。但是,最近我实施了#34;幻灯片通知"如果你将显示成功和错误消息。这些工作正常,但如果我使用header("location: ProjectUserProfile.php?UploadSuccessful")返回页面,则会显示失败



<?php
// all the uploading etc that works occurs here
header("location: ProjectUserProfile.php?UploadSuccessful");
echo "<script> openMessage('Information','The duplicate files were successfully uploaded!') </script>";
?>
&#13;
&#13;
&#13;

重定向到ProjectUserProfile.php?UploadSuccessful后,失败确认openMessage,因此没有任何反应。

然而,如果我没有使用header("location: ProjectUserProfile.php?UploadSuccessful"),那么&#34;通知&#34;会滑入并工作。

有没有人有任何解决方案或建议?

javascript函数的相关代码&#39; openMessage()&#39;下面:

&#13;
&#13;
function openMessage(Purpose, DisplayText){
	var notificationDiv = document.getElementById("slideinNotification");
	if(notificationDiv){
		alert("exists");
	}
	else{
		alert("does not exist");
	}


	document.addEventListener("DOMContentLoaded", function(event){
		if(Purpose == "Information"){
		document.getElementById("slideInNotification").style.backgroundColor = "#4CAF50";
		}
		else if(Purpose == "Warning"){
			document.getElementById("slideInNotification").style.backgroundColor = "#FF9800";
		}
		else if(Purpose == "Error"){
			document.getElementById("slideInNotification").style.backgroundColor = "#F44336";
		}
		document.getElementById("notificationMessage").innerHTML = DisplayText;
		moveElement();
	});
}
&#13;
<?php
if($filesWereDeleted == true){
$connection = new mysqli("localhost", "root", "root", "project");
$result = $connection -> query("UPDATE UserProfileImage SET UploadStatus = 1 WHERE UserUniqueID = '$userProfileId'");
header("location: ProjectUserProfile.php?DeletionSuccessful");
echo "<script> openMessage('Information','The profile image was successfully deleted!') </script>";
}
?>



<div id = "slideInNotification" class = "slideNotification">
<p id = "notificationMessage" class = "notificationInfo"></p>
<a href = "javascript:void(0)" class = "closeButton" onclick = "closeMessage()">&times;</a>
</div>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:1)

首先,你的invalid_ind = [ind for ind in offspring if not ind.fitness.valid] fitnesses = map(toolbox.evaluate, invalid_ind) for ind, fit in zip(invalid_ind, fitnesses): ind.fitness.values = fit 查询暴露给SQL注入,如果你从用户那里得到id,我希望注意,阅读有关预准备语句。

其次,关于您的问题,您在发送UPDATE标头的同一响应中回显通知脚本,因此在浏览器加载JavaScript代码之前,它会在您的通知javascript时将客户端重定向到新页面代码没有回应...

如果您的问题是用户更新了图片并且因为缓存而未显示,则可以在图片Location的获取查询中使用uniqid()或修改时间,更有效

答案 1 :(得分:0)

问题是,一旦你使用header("location: ProjectUserProfile.php?DeletionSuccessful");,你就不应该在输出中写任何东西,因为浏览器会忽略它。除此之外,我不确定单行<script> openMessage('Information','The duplicate files were successfully uploaded!') </script>如何对浏览器有任何意义,因为除非您通过AJAX接收或加载它,否则它本身不会构成HTML文档。变成<iframe>;但即便如此,我怀疑混合控制指令(重定向)与视图标记(脚本标记)是个好主意。

您必须在ProjectUserProfile.php中发布确认消息,因此请将脚本标记移到那里。您可以使用?UploadSuccessful位作为参考,以了解是否需要在文档中包含消息脚本。