[英]Editing XML file with Data passed from AJAX - XML data is being deleted
我正在一个项目中,我将从Google Maps API读取数据并将其转换为每个对象的XML,然后将该XML存储在数组插槽中(这将发生多次,直到读取所有数据为止),然后向PHP文件发送Ajax POST请求,发送完整的XML数组和一个布尔值(以使服务器知道它是哪个请求)。 然后,PHP将使用SimpleXML进行加载,使用接收到的数据编辑XML,然后将其保存。
我的问题是,当我发出ajax请求时,Firebug将识别POST
请求,并且正在发送所有正确的数据。 它抛出302
(错误?)并说“ Moved Temporarily
然后发生GET
请求(我认为这是由服务器初始化的),该请求输出一个错误,提示Undefined inded: ajax
我询问布尔值(称为ajax)的行上的ajax是真的。 然后,当我检查我的XML文件时,所有数据都被删除(该文件仍然存在,但其中不再包含任何XML),我对于如何解决此问题感到非常困惑,而且我不确定该怎么做。 这是我的一些相关代码。
非常感谢您可以提供的任何帮助。 任何帮助都将非常有帮助!
另外,如果您需要我澄清任何事情,请随时发表评论。
javascript
function sendData(result)
{
$.ajax(
{
type:'POST',
url:'getXML.php',
traditional: false,
data:
{
//Result is an array full of XML
'myXML': result,
//The ajax boolean is for letting the PHP know that it is this request
'ajax' : true
},
success: function(data)
{
$('#output').text(data);
}
})
}
的PHP
<?php
//Set error reporting
ini_set('display_errors', 1);
ini_set('log_errors', 1);
ini_set('error_log', dirname(__FILE__) . '/error_log.txt');
error_reporting(E_ALL);
//Checks if the get request is from the AJAX call
if($_POST['ajax'])
{
//////////////////////////////Code for editing XML/////////////////////////////////////////
//Checks to see if the xml file exists.
if (file_exists('business.xml'))
{
//Loads the XML file
$xml = simplexml_load_file('business.xml');
$result = $_POST['myXML'];
//Append XML to existing file using data loaded in from AJAX request
appendXML($xml, $result);
}
else
{
//Loading XML has failed
exit('Failed to open business.xml.');
}
}
function appendXML($xml, $xmlResult)
{
foreach($xmlResult as $result)
{
//Creates new business node
$business = $xml ->addChild('business');
//Adds XML to business node (Please oh dear god let this work)
$business ->addChild($result);
file_put_contents("business.xml", $xml);
header('Location: getXML.php');
}
}
?>
您遇到的问题与此行有关:
header('Location: getXML.php');
在页面的第一次运行中,一切工作正常,并调用了appendXML代码块。 当发生这种情况时,您正在将标题重定向到同一页面(我不确定为什么)。 发生这种情况时,页面会重新加载,但是在新页面中,不会设置您之前设置的帖子数据。 结果$ _POST为空,而if语句失败,进一步的$ _POST ['myXML']也为空,这将清空您的XML。
如果出于某种原因需要重新加载页面,请考虑创建会话并将值存储在会话变量中。 您还应该查看如何清理传入的数据,因为当前代码存在一个漏洞,有人可以将从浏览器传入的任何信息注入到服务器上的XML文件中。 这可能没什么大不了的,但我一直担心让某人直接将未转义的任何内容写入系统中的文件。 如果没有其他人可以利用此恶意地最大化驱动器上的空间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.