我目前正在开发基于Adobes Scene7的web2print项目。打印产品的完整网址(pdf)非常长,超出了网址长度的所有浏览器限制。因此,为了获得最终的打印产品,我假设我必须通过POST方法以不同的方式提交URL。 似乎有两种方式:首先,使用html表单(method = post)并将所有url参数创建为(隐藏)输入字段。其次,使用post。进行ajax调用(例如jQuery.ajax)。
实际上如果我在浏览器中打开打印网址,就会在浏览器中打开就绪pdf。所以我需要一种方法通过POST将非常长的URL发送到服务器并打开我从中获取的PDF。测试ajax版本我遇到了同源策略并收到错误,因为我调用的是不在本地服务器上的URL。这必须是web2print项目中的标准情况,这是如何处理的?
提前谢谢 Michbeck答案 0 :(得分:0)
我解决了问题。我分两步完成。首先,我使用ajax将基本url和url参数发送到本地服务器上的php脚本。使用jQuery很容易做到:
jQuery.ajax({
type : "POST",
url : './includes/php/userdata.php',
data: { method: 'get_print_version',
url: base_url,
parameter: query_parameter,
num: num_parameter },
error: function(error) {
console.log("Print version failed");
},
success: function(reault) {
console.log("What is the result?");
}
});
服务器脚本使用cURL将数据发送到最终服务器。因此,基本URL和参数不会作为一个URL发布,而是通过使用CURLOPT_POST和CURLOPT_POSTFIELDS分隔。可以使用file_put_contents将服务器响应(pdf)写入文件。如果PDF变大,您将在此处获得内存限制错误。比将cURL的答案直接写入pdf文件更好。
if ($_method == 'get_print_version')
{
$url = $_REQUEST['url'];
$parameter = $_REQUEST['parameter'];
$num = $_REQUEST['num'];
$post = curl_init();
curl_setopt($post, CURLOPT_URL, $url);
curl_setopt($post, CURLOPT_POST, $num);
curl_setopt($post, CURLOPT_POSTFIELDS, $parameter);
/* write calendar directly to file */
$pdf = fopen('./Calendar.pdf', 'w');
curl_setopt($post, CURLOPT_FILE, $pdf);
curl_exec($post);
curl_close($post);
echo $result;
}