Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jquery将数据发布到下载svg文件的php文件中_Php_Jquery_Svg - Fatal编程技术网

使用jquery将数据发布到下载svg文件的php文件中

使用jquery将数据发布到下载svg文件的php文件中,php,jquery,svg,Php,Jquery,Svg,我遇到了一个代码的问题,该代码应该生成一个svg文件供下载,而不将其保存在服务器上。我已经设法下载了一个文件,其中包含一些代码,但实际的$data本身却没有 所以,去掉不必要的东西,html按钮启动javascript <button type="button" onclick="toSVG()">Save SVG</button> 这将把diagram.svg保存到硬盘中 <?php $data = $_POST['data']; $file = "diagra

我遇到了一个代码的问题,该代码应该生成一个svg文件供下载,而不将其保存在服务器上。我已经设法下载了一个文件,其中包含一些代码,但实际的$data本身却没有

所以,去掉不必要的东西,html按钮启动javascript

<button type="button" onclick="toSVG()">Save SVG</button>
这将把diagram.svg保存到硬盘中

<?php
$data = $_POST['data'];
$file = "diagram.svg";

header('Content-type: image/svg+xml');
header("Content-Disposition: attachment; filename=$file");

echo('<?xml version="1.0" encoding="iso-8859-1"?>' . "\n"); 
echo('<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20000303 Stylable//EN" "http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-stylable.dtd">' . "\n");  
echo $data; ?>

但是下载的diagram.svg只包含前两个回音,$data是空的

在浏览器的“网络访问”窗口中,我注意到saveSVG.php出现了两次,并且在POST方法状态中设置为OK,并且$data被正确回显,而在GET状态中设置为'Cancelled',即使我刚刚下载了文件(其中$data为空)

我就是不明白:)
有人能帮我理解为什么这不起作用吗?

首先,您使用post数据对saveSVG.php进行post调用:

$.post('./saveSVG.php', 
    {'data': data},
在该请求返回您想要的响应之后(在
函数(数据){
中的
数据
),您重定向到saveSVG.php,而不带post数据:
window.location='saveSVG.php';

因此,第二个调用,即您的实际下载,是空的

这样试试(根本没有$.post):

在php中:

$data = $_GET['data'];

首先,使用post数据对saveSVG.php进行post调用:

$.post('./saveSVG.php', 
    {'data': data},
在该请求返回您想要的响应之后(在
函数(数据){
中的
数据
),您重定向到saveSVG.php,而不带post数据:
window.location='saveSVG.php';

因此,第二个调用,即您的实际下载,是空的

这样试试(根本没有$.post):

在php中:

$data = $_GET['data'];

首先,使用post数据对saveSVG.php进行post调用:

$.post('./saveSVG.php', 
    {'data': data},
在该请求返回您想要的响应之后(在
函数(数据){
中的
数据
),您重定向到saveSVG.php,而不带post数据:
window.location='saveSVG.php';

因此,第二个调用,即您的实际下载,是空的

这样试试(根本没有$.post):

在php中:

$data = $_GET['data'];

首先,使用post数据对saveSVG.php进行post调用:

$.post('./saveSVG.php', 
    {'data': data},
在该请求返回您想要的响应之后(在
函数(数据){
中的
数据
),您重定向到saveSVG.php,而不带post数据:
window.location='saveSVG.php';

因此,第二个调用,即您的实际下载,是空的

这样试试(根本没有$.post):

在php中:

$data = $_GET['data'];

我很难解决类似的问题。上面解决方案中的GET方法适用于小数据,但不适用于我的完整数据。更改为JQuery AJAX
.post()
在OP中,我遇到了与OP完全相同的问题—服务器端php代码正在运行,但没有给我保存的文件。我终于意识到,在这种情况下,AJAX正是我不想要的

我的解决方案是一个简单的表单,其中有一个隐藏字段来包含要发布的数据。加载页面时,隐藏输入的值为“0”,但在onsubmit事件中被javascript代码替换为SVG数据。
表格如下:

<form name="myform" method="post" action="save_php.php" onsubmit="DoSubmit();">
<input type="hidden" name="post_data" value="0" />
<input type="submit" name="submit" value="Save SVG"/>
</form>
最后,服务器端PHP只读取$\u POST,并设置内容头以输出准备保存的文件:

<?php
$data = $_POST["post_data"];
$file = "diagram.svg";

header('Content-type: image/svg+xml');
header("Content-Disposition: attachment; filename=$file");

echo('<?xml version="1.0" encoding="iso-8859-1"?>' . "\n"); 
echo('<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20000303 Stylable//EN" "http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-stylable.dtd">' . "\n");  
echo $data;
?>


我很难为情地承认我花了多长时间才弄明白这一点!但如果没有OP和上面的答案,我不可能做到。谢谢!

我遇到了一个类似的问题。上面解决方案中的GET方法适用于小数据,但不适用于我的完整数据。改为JQuery AJAX
.post()
在OP中,我遇到了与OP完全相同的问题—服务器端php代码正在运行,但没有给我保存的文件。我终于意识到,在这种情况下,AJAX正是我不想要的

我的解决方案是一个简单的表单,其中有一个隐藏字段来包含要发布的数据。加载页面时,隐藏输入的值为“0”,但在onsubmit事件中被javascript代码替换为SVG数据。
表格如下:

<form name="myform" method="post" action="save_php.php" onsubmit="DoSubmit();">
<input type="hidden" name="post_data" value="0" />
<input type="submit" name="submit" value="Save SVG"/>
</form>
最后,服务器端PHP只读取$\u POST,并设置内容头以输出准备保存的文件:

<?php
$data = $_POST["post_data"];
$file = "diagram.svg";

header('Content-type: image/svg+xml');
header("Content-Disposition: attachment; filename=$file");

echo('<?xml version="1.0" encoding="iso-8859-1"?>' . "\n"); 
echo('<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20000303 Stylable//EN" "http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-stylable.dtd">' . "\n");  
echo $data;
?>


我很难为情地承认我花了多长时间才弄明白这一点!但如果没有OP和上面的答案,我不可能做到。谢谢!

我遇到了一个类似的问题。上面解决方案中的GET方法适用于小数据,但不适用于我的完整数据。改为JQuery AJAX
.post()
在OP中,我遇到了与OP完全相同的问题—服务器端php代码正在运行,但没有给我保存的文件。我终于意识到,在这种情况下,AJAX正是我不想要的

我的解决方案是一个简单的表单,其中有一个隐藏字段来包含要发布的数据。加载页面时,隐藏输入的值为“0”,但在onsubmit事件中被javascript代码替换为SVG数据。
表格如下:

<form name="myform" method="post" action="save_php.php" onsubmit="DoSubmit();">
<input type="hidden" name="post_data" value="0" />
<input type="submit" name="submit" value="Save SVG"/>
</form>
最后,服务器端PHP只读取$\u POST,并设置内容头以输出准备保存的文件:

<?php
$data = $_POST["post_data"];
$file = "diagram.svg";

header('Content-type: image/svg+xml');
header("Content-Disposition: attachment; filename=$file");

echo('<?xml version="1.0" encoding="iso-8859-1"?>' . "\n"); 
echo('<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20000303 Stylable//EN" "http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-stylable.dtd">' . "\n");  
echo $data;
?>


我很难为情地承认我花了多长时间才弄明白这一点!但如果没有OP和上面的答案,我不可能做到。谢谢!

我遇到了一个类似的问题。上面解决方案中的GET方法适用于小数据,但不适用于我的完整数据。改为JQuery AJAX
.post()
在OP中,我遇到了与OP完全相同的问题—服务器端php代码正在运行,但没有给我保存的文件。我终于意识到,在这种情况下,AJAX正是我不想要的

我的解决方案是一个简单的表单,有一个隐藏字段来包含要发布的数据。加载页面时,隐藏输入的值为“0”,但被SVG数据替换为