PHP - 使用 ajax 和 return XML 提交表单
PHP - Submit form with ajax, and return XML
我在使用 jQuery/AJAX 和 return 发送成功消息 + XML 文件(在 PHP 中生成)提交表单时遇到问题。
这是我现在拥有的:
invoice.php
:
<form method="post" id="invoiceform">
<? /* Populate the form with input later on. For now, the XML data is hardcoded in PHP */ ?>
<button type="submit">Submit form</button>
</form>
//Submit the form:
$('#invoiceform').on('submit', function(e) { //use on if jQuery 1.7+
e.preventDefault(); //prevent form from submitting
e.stopImmediatePropagation(); //prevent double.
//Show the loading message.
$form = $(this);
// Use Ajax to submit form data
$.ajax({
url: '/api/invoice/invoice_converter',
type: 'POST',
data: $form.serialize(),
dataType: "json",
success: function(data) {
console.log(data);
if (data.result == 'success') {
//Success
$(".status").html(data.message);
} else {
$(".status").html(data.message);
}
},
error: function(data) {
console.log("Something went wrong!");
console.log(data);
}
});
return false;
});
好的,上面只是将表单提交到下面的页面
invoice_converter.php
:
$invoice = new Invoice;
if($_POST)
{
$convertInvoice = $invoice->convertInvoice();
if($convertInvoice == 1){
$error = "Error: Error message goes here.";
$stop = true;
}
if($stop){
$result = array("result" => "error","message" => $error);
}else{
$result = array("result" => "success","message" => $convertInvoice);
}
}
header('Content-type: application/json');
echo json_encode($result);
因此,上面的页面处理 return 消息。实际的 XML 生成函数位于页面下方
functions.php
:
function convertInvoice(){
/* create a dom document with encoding utf8 */
$domtree = new DOMDocument('1.0', 'UTF-8');
/* create the root element of the xml tree */
$xmlRoot = $domtree->createElement("xml");
/* append it to the document created */
$xmlRoot = $domtree->appendChild($xmlRoot);
$currentTrack = $domtree->createElement("track");
$currentTrack = $xmlRoot->appendChild($currentTrack);
/* you should enclose the following two lines in a cicle */
$currentTrack->appendChild($domtree->createElement('charge','letter'));
$currentTrack->appendChild($domtree->createElement('description','Payable cover letters'));
$currentTrack->appendChild($domtree->createElement('charge','vat'));
$currentTrack->appendChild($domtree->createElement('description','Payable VAT'));
/* get the xml printed */
$xml = $domtree->saveXML();
return $xml;
}
在 console.log 中从上面 return 编辑的数据是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<xml>
<track>
<charge>letter</ charge >
<description>Payable cover letters</ description >
<charge>vat</ charge >
<description>Payable VAT</ description >
</track>
</xml>
这是正确的,但是,我希望能够 "Save" 将以上内容放入 XML 文件中,并提供给用户下载。
您需要制作一个可写文件,然后将$xml写入文件。
此代码创建 track.xml 并将 download link 插入到 document.
使用 fopen
以写入(如果不存在则创建)模式打开文件,然后使用 fwrite
将内容写入文件,然后使用 fclose
关闭文件。该文件必须放在 public 目录中,以确保它可以被网络服务器访问。
// Open file and write contents
$file = fopen('track.xml', 'w+');
fwrite($file, $xml);
fclose($file);
// Generate download link
echo '<a href="/path/to/track.xml" download>Download</a>';
注意: 您需要使用 PHP 确保输出目录可写:
chown www-data:www-data /var/www/path/to/output
chmod 775 /var/www/path/to/output
我在使用 jQuery/AJAX 和 return 发送成功消息 + XML 文件(在 PHP 中生成)提交表单时遇到问题。
这是我现在拥有的:
invoice.php
:
<form method="post" id="invoiceform">
<? /* Populate the form with input later on. For now, the XML data is hardcoded in PHP */ ?>
<button type="submit">Submit form</button>
</form>
//Submit the form:
$('#invoiceform').on('submit', function(e) { //use on if jQuery 1.7+
e.preventDefault(); //prevent form from submitting
e.stopImmediatePropagation(); //prevent double.
//Show the loading message.
$form = $(this);
// Use Ajax to submit form data
$.ajax({
url: '/api/invoice/invoice_converter',
type: 'POST',
data: $form.serialize(),
dataType: "json",
success: function(data) {
console.log(data);
if (data.result == 'success') {
//Success
$(".status").html(data.message);
} else {
$(".status").html(data.message);
}
},
error: function(data) {
console.log("Something went wrong!");
console.log(data);
}
});
return false;
});
好的,上面只是将表单提交到下面的页面
invoice_converter.php
:
$invoice = new Invoice;
if($_POST)
{
$convertInvoice = $invoice->convertInvoice();
if($convertInvoice == 1){
$error = "Error: Error message goes here.";
$stop = true;
}
if($stop){
$result = array("result" => "error","message" => $error);
}else{
$result = array("result" => "success","message" => $convertInvoice);
}
}
header('Content-type: application/json');
echo json_encode($result);
因此,上面的页面处理 return 消息。实际的 XML 生成函数位于页面下方
functions.php
:
function convertInvoice(){
/* create a dom document with encoding utf8 */
$domtree = new DOMDocument('1.0', 'UTF-8');
/* create the root element of the xml tree */
$xmlRoot = $domtree->createElement("xml");
/* append it to the document created */
$xmlRoot = $domtree->appendChild($xmlRoot);
$currentTrack = $domtree->createElement("track");
$currentTrack = $xmlRoot->appendChild($currentTrack);
/* you should enclose the following two lines in a cicle */
$currentTrack->appendChild($domtree->createElement('charge','letter'));
$currentTrack->appendChild($domtree->createElement('description','Payable cover letters'));
$currentTrack->appendChild($domtree->createElement('charge','vat'));
$currentTrack->appendChild($domtree->createElement('description','Payable VAT'));
/* get the xml printed */
$xml = $domtree->saveXML();
return $xml;
}
在 console.log 中从上面 return 编辑的数据是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<xml>
<track>
<charge>letter</ charge >
<description>Payable cover letters</ description >
<charge>vat</ charge >
<description>Payable VAT</ description >
</track>
</xml>
这是正确的,但是,我希望能够 "Save" 将以上内容放入 XML 文件中,并提供给用户下载。
您需要制作一个可写文件,然后将$xml写入文件。
此代码创建 track.xml 并将 download link 插入到 document.
使用 fopen
以写入(如果不存在则创建)模式打开文件,然后使用 fwrite
将内容写入文件,然后使用 fclose
关闭文件。该文件必须放在 public 目录中,以确保它可以被网络服务器访问。
// Open file and write contents
$file = fopen('track.xml', 'w+');
fwrite($file, $xml);
fclose($file);
// Generate download link
echo '<a href="/path/to/track.xml" download>Download</a>';
注意: 您需要使用 PHP 确保输出目录可写:
chown www-data:www-data /var/www/path/to/output
chmod 775 /var/www/path/to/output