我尝试使用ajax将localstorage中的数据发送到php,但是我得到错误
undefined index data
代码生成一个存储在localstorage中的dataurl。当用户点击链接时,将调用pdfGen.php,我想在localstrage中使用数据。
chart.php
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#download').click(function() {
$.ajax({
type: "POST",
url: "pdfGen.php",
data: {data:'hello'},
success: function(data) {
alert("hi");
}
});
});
}); //END $(document).ready()
</script>
<script>
//<![CDATA[
(function() {
window.onload = function(){
html2canvas(document.getElementById('chart'), {
"onrendered": function(canvas) {
var img = new Image();
img.onload = function() {
img.onload = null;
console.log(canvas.toDataURL("image/png"));
window.localStorage.setItem("imgURL", canvas.toDataURL("image/png"));
};
img.onerror = function() {
img.onerror = null;
if(window.console.log) {
window.console.log("Not loaded image from canvas.toDataURL");
} else {
//alert("Not loaded image from canvas.toDataURL");
}
};
img.src = canvas.toDataURL("image/png");
}
});
};
})();
//]]>
</script>
<body>
<a href="pdfGen.php" id="download" >Report</a>
..more code to generate the chart
</body>
下载按钮调用pdfGen.php脚本,该脚本使用fpdf生成报告。
pdfGen.php
<?php
echo $_POST['data']; //gives error
/*$pdf = new FPDF();
$pdf->AddPage();
//over here I want to add the image from the chart.php page whose data url is now in the localstorage.
..more code to generate report
$pdf->output();*/
?>
如何获取php脚本中的数据?我尝试进行ajax调用,但是我在pdfGen.php脚本中获得了未定义的索引。我收到了警报HI但无法获取服务器上的数据。 它似乎不起作用。
答案 0 :(得分:3)
在你的ajax定义数据中这样:
$.ajax({
type: "POST",
url: "pdfGen.php",
data: { data: 'hello' },
success: function(data) {
alert("hi");
}
});
现在您可以通过$ _POST [&#34; data&#34;]检索它。似乎您需要阅读有关jquery ajax文档的更多信息,请在此处阅读friend http://api.jquery.com/jquery.ajax/。
&#34;数据&#34; ajax中的元素是你的参数
要发送到服务器的数据。它被转换为查询字符串if 还不是一个字符串。它附加到GET请求的URL。看到 processData选项可防止此自动处理。 对象必须 是键/值对。如果value是一个数组,jQuery序列化多个 具有相同键的值基于传统设置的值 (如下所述)。
请参阅jquery ajax文档中的粗体文本。
修改强>
发现第二个错误,它是你的链接,你正在做ajax然后链接也因为href重定向到pdfGen.php,为了防止这种情况你可以制作href&#34;#&#34;,或者你可以使用preventdefault():
$('#download').click(function(event) {
event.preventDefault();
$.ajax({
type: "POST",
url: "pdfGen.php",
data: {data:'hello'},
success: function(data) {
alert("hi");
}
});
});
第二次编辑
好像你需要重定向到pdfGen.php来获取报告,然后你可能不需要ajax,你应该做的就是把参数放到你的链接href。
<a href="pdfGen.php?data=hello" id="download" >Report</a>
通过$ _GET获取它[&#34;数据&#34;];在php。
答案 1 :(得分:1)
您的错误是因为您使用锚标记返回pdfGen.php。 Ajax请求将发送数据并在成功函数中接收响应。当您使用SELECT
p.Product_ID,
p.Product_Name,
p.Product_Cost,
Total_Cost = p.Product_Cost * (p.Quantity + ISNULL(s.Quantity, 0)),
p.Product_Description,
p.Quantity,
s.Quantity,
p.Quantity + ISNULL(s.Quantity, 0) AS [Total]
FROM
presentsupply p
LEFT JOIN
SendStockByVendor s ON p.Product_Name = s.Product_Name;
时,实际上回到pdfGen.php而没有$ _POST [&#39;数据&#39;]中的任何值。
Ajax Call如下:
<a href="pdfGen.php" id="download" >Report</a>
在pfdGen.php中,作为一个很好的编程习惯,你还应该检查是否设置了post变量。
var toSend = "data:"+jsVariableContainingYourText; (or simply "data:Hello";)
$.ajax({
type: "POST",
url: "pdfGen.php",
data: toSend,
success: function(data)
{
alert("hi");
}
});
还要确保ajax调用的url是正确的(在您的情况下,pdfGen.php应该与您的html文件位于同一文件夹中)