我正在开发一个Web应用程序,它需要的一个功能是能够以交互方式下载相当大的文件 - 该文件在服务器上不存在 - 并且完全由从数据库动态加载的数据组成.
目前我正在使用以下代码(不会为你运行,但你可以得到这个想法),其中我添加了一个带文件名的文本框,然后隐藏文本区域包含json样式下载所需的所有文本,然后链接尝试URI下载的功能.
有趣的是,当在chrome中运行时,我得到一个页面,说URI太长而且不能正常工作等,但文件仍然被下载.
"提交的URI太大!请求的URL的长度超过了此服务器的容量限制.无法处理请求.如果您认为这是服务器错误,请联系网站管理员."
无论如何,令人烦恼的是:允许这些下载的页面使用来自上一页的post/get - 因此后退按钮不可用,因为它给了我们:
"确认表单重新提交此网页需要您之前输入的数据才能正确显示.您可以再次发送此数据,但这样做会重复此页面之前执行的任何操作."
page - 我喜欢做的是将这些URI下载产生到一个新选项卡中,因此不需要后退按钮,但添加目标空白没有帮助
另外,如上所述,我也有一个"全部下载"的功能 - 这对我来说是在xampp服务器上本地运行的东西,在谷歌浏览器上 - 然而那些我正在建立应用程序报告按钮不适合他们(他们在使用safari的Mac上,没有机会亲自看到这个并收集信息 - 所以虽然我没有用我有限的信息预期答案,我希望有人可能有一个想法!)
码:
< script >
function download(filename, text) {
var element = document.createElement('a');
element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
// I tried addin this but no new tab appeared!
//element.target = "_blank:";
element.setAttribute('download', filename);
element.style.display = 'none';
document.body.appendChild(element);
element.click();
document.body.removeChild(element);
}
function download_all() {
var nameElements = document.getElementsByName("name");
var valueElements = document.getElementsByName("text");
for (i = 0; i < nameElements.length; i++) { …Run Code Online (Sandbox Code Playgroud)我是REST的新手,但据我所知,我知道以下URL符合REST原则.资源的布局如下:
/user/<username>/library/book/<id>/tags
^ ^ ^ ^
|---------|-----------|---|- user resource with username as a variable
|-----------|---|- many to one collection (books)
|---|- book id
|- many to one collection (tags)
GET /user/dave/library/book //retrieves a list of books id's
GET /user/dave/library/book/1 //retrieves info on book id=1
GET /user/dave/library/book/1/tags //retrieves tags collection (book id=1)
Run Code Online (Sandbox Code Playgroud)
但是,如何优化此示例API呢?比如说我在我的图书馆里有10K书,我想获取我图书馆里每本书的详细信息.我真的应该/library/book/<id>为每个给出的id 强制进行http调用/library/book吗?或者我应该启用多个id作为参数?/library/book/<id1>,<id2>...并且喜欢一次使用100个id进行批量提取?
REST原则对这种情况有何看法?你有什么看法?
再次感谢.
通过Elisabeth Hendrickson的测试启发式学习表,我看到以下建议:
数字:32768(2 ^ 15)32769(2 ^ 15 + 1)65536(2 ^ 16)65537(2 ^ 16 +1)2147483648(2 ^ 31)2147483649(2 ^ 31 + 1)4294967296(2 ^ 32) 4294967297(2 ^ 32 + 1)
有人知道测试所有这些案件的原因吗?我的直觉是开发人员可能使用的数据类型(整数,长,双...)
同样,使用字符串:
长(255,256,257,1000,1024,2000,2048或更多字符)
我有以下jQuery click()函数需要通过ajax将表单数据发送到数据库.
$("#maandbutton").live('click', function(event) {
$.get("ajax.php",{"action":"addm","maandtekst":$('#maandtekstinput').val(),"maand":$('#maandselect').val(),"bovenonder":$('#bovenonder').val()},function(msg){
$("#maandtable").append($('<tr><td class="left">' + $('#maandtekstinput').val() + '</td><td class="right">' + $('#bovenonder').val() + '</td><td class="right">' + $('#maandselect').val() + '</td><td class="icon"></td></tr>'));
$('table.zebra tr').removeClass('odd');
$('table.zebra tr:odd').addClass('odd');
$('#maandtekstinput').val('');
$('#maandselect').val('');
$('#bovenonder').val('');
$("#maandbutton").button({ disabled: true });
})
});
Run Code Online (Sandbox Code Playgroud)
问题是如果textarea #maandtekstinput中有很多文本,只有append正在工作,但数据没有到达我的sql数据库.
我的ajax.php脚本有一个简单的switch语句.
$maandtekst = htmlspecialchars($_GET['maandtekst']);
switch($_GET['action'])
{
case 'addm':
$query = "INSERT INTO `site_maandteksten` (`id`, `maand`, `bovenonder`, `tekst`) VALUES (NULL, '".$maand."', '".$bovenonder."', '".htmlspecialchars_decode($maandtekst)."')";
$result = mysql_query($query) or die(mysql_error());
break;
}
Run Code Online (Sandbox Code Playgroud)
我想知道为什么我的脚本不会将我的textarea文本传递给数据库.在我的数据库中,它是一个具有5000个字符空间的长文本字段
我需要使用客户端技术将潜在的大量数据从一个页面传递到另一个页面.它基本上是一个id列表,它将显示在目标页面上.显然查询字符串不合适,因为可能有数千个ID,所以我认为我可以使用javascript动态添加表单(method = GET),将id写入隐藏字段并将表单提交到目标页面.它似乎工作正常,但我想知道是否有更好的方法 - 这感觉有点hacky.
我正在尝试POST从浏览器向我的服务器(本地主机)发送请求.我的请求网址是:
http://localhost:8080/myPath/myServlet?requestData={ .......//Json String......};
Run Code Online (Sandbox Code Playgroud)
requestData是一个json String(我正在使用GSON.)一切正常,直到json字符串中的数据超过特定限制.说,我在json字符串中发送对象数组.如果列表中的对象数超过,67则会出现以下错误:
AM org.apache.coyote.http11.AbstractHttp11Processor process
INFO: Error parsing HTTP request header
Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我完全糊涂了.为什么会发生这种情况以及需要采取哪些措施来解决这个问题?我想了解这背后的原因,因为我不明白,在特定数量的对象后它突然停止工作,我在控制台中收到此错误.
谢谢.
我正在开发一个应用程序,我需要将对象列表传递给 REST 端点,该端点将执行一些计算并将结果返回给调用方。
关于如何处理这种情况,这个问题更像是一个哲学问题?
在 GET 请求中传递一个巨大的有效负载是一个坏主意。同时它并不是真正的 POST/PUT 请求,因为它没有修改服务器上的任何状态。
有没有人遇到过这种情况?
我有2个资源:courses和professors.
A course具有以下属性:
A professor具有以下属性:
所以,你可以说课程有一位教授,一位教授可能有很多课程.
如果我想获得所有课程或所有教授,我可以:GET /api/courses或GET /api/professors分别.
当我想要获得某位教授所教授的所有课程时,我的困境就来了.
我可以使用以下任何一种方法:
GET /api/professors/:prof_id/courses GET /api/courses?professor_id=:prof_id我不确定要使用哪个.
目前,我正在使用后者的增强形式.我的理由是,如果我想添加过滤/排序标准,它更具可扩展性.
我实际上是在编码/嵌入JSON字符串到查询参数中.因此,(解码)示例可能是:
GET /api/courses?where={professor_id: "teacher45", year: 2016}&order={attr: "topic", sort: "asc"}
Run Code Online (Sandbox Code Playgroud)
上述请求将检索教授使用2016年提供的professor_id教授(或当前正在)教授的所有课程,按照主题标题按升序ASCII顺序排序.
我从来没有见过有人这样做过,所以我想知道我是不是做了些蠢事.
是否有使用查询字符串与资源路径进行过滤条件的标准做法?过去做过什么更大的API?是否可以接受或鼓励同时使用两种范例(使两个端点都可用)?如果我确实应该使用第二种范式,除了编码JSON之外,还有更好的组织方法吗?有没有人在他们的查询字符串中看到使用JSON的另一个公共API?
编辑基于意见较少.(看评论)
我有一个方法,通过AJAX调用后端,从MySQL数据库获取一个blob文件,由PHP检索.
问题是PHP变量包含一个字符串,但AJAX调用是空的,PDF函数不起作用.
这是AJAX代码,它被调用.
self.showPDF = function() {
$.ajax({
type: 'GET',
url: BASEURL + 'index.php/myprofile/openUserPDF/' + auth,
contentType: 'application/json; charset=utf-8',
dataType: 'json',
})
.done(function(data) {
console.log(data);
window.open("data:application/pdf," + escape(data));
})
.fail(function(jqXHR, textStatus, errorThrown) {
alert("Could not open pdf" + errorThrown);
})
.always(function(data) {});
}
Run Code Online (Sandbox Code Playgroud)
这是后端的PHP函数,我使用的是CodeIgniter框架.
public function openUserPDF($token) {
if ($this->input->is_ajax_request()) {
$userid = $this->myajax->getUserByAuth($token);
if ($userid) {
/* If we have an impersonated user in the session, let's use him/her. */
if (isset($_SESSION['userImpersonated'])) {
if ($_SESSION['userImpersonated'] > 0) …Run Code Online (Sandbox Code Playgroud) http ×3
javascript ×3
jquery ×3
rest ×3
ajax ×2
api ×1
api-design ×1
asp.net ×1
client-side ×1
download ×1
get ×1
iis-7 ×1
integer ×1
java ×1
long-integer ×1
max ×1
numbers ×1
pdf ×1
php ×1
servlets ×1
string ×1
testing ×1
uri ×1
web-services ×1