更多编辑
在几个浏览器上测试代码后,似乎我只能在FireFox上获得XMLHttpRequest.lengthComputable
为真,从而给我一个下载百分比。 Chrome和Safari都会返回false ...有什么想法可以解决这个问题吗?我在PHP脚本的顶部添加了header("Access-Control-Allow-Origin: *");
标记。
修改
好的,在评论的帮助下,我让我的PHP发送了Content-Length
但是,evt.total
仍然会返回0.任何想法?
经过进一步测试后,似乎evt.lengthComputable
设置为false - 因此它忽略了evt.total
...现在我需要找出原因。
以下是标题中的数据
Request Method:GET
Status Code:200 OK
Request Headers
Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Host:(deleted data here for confidential reasons)
Origin:(deleted data here for confidential reasons)
Referer:(deleted data here for confidential reasons)
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36
Response Headers
Access-Control-Allow-Origin:*
Connection:keep-alive
Content-Encoding:gzip
Content-Length:1914150
Content-Type:application/json
Date:Wed, 25 Feb 2015 22:38:22 GMT
Server:Apache
Vary:Accept-Encoding
原始帖子
也许这是一个愚蠢的问题,但在这里......
我正在使用私人PhoneGap应用程序,该应用程序本质上是一个公司目录。当应用程序首次启动时,它会检测到尚未下载存储的JSON为空,并提示用户开始下载。
我使用AJAX调用获取JSON数据。 JSON由我们的服务器上的PHP生成,该服务器查询数据库,构建数组,然后json_encode
并回显输出。
数据传输到我们的应用程序,一切都运行良好,但是,我想建立一个" Progress Meter"下载需要我确切知道发送的数据有多大。我知道PHP有一些方法可以获取某些文件的文件大小,例如filesize($somefile)
,但我怎样才能测量JSON数据的字节大小?甚至可以这样做吗?以下是我正在使用的一些代码...
PHP构建JSON数据
while(...fetch the data) {
$output[] =
array (
"id" => $row['id'],
"firstname" => $row['firstname'],
"lastname" => $row['lastname'],
"jobtitle" => $row['jobtitle'],
"phone" => $row['phone'],
"cell" => $row['cell'],
"email" => $row['email'],
"department" => $row['department'],
"sub" => $row['sub'],
"image" => $row['image']
);
}
echo json_encode($output);
我在这里使用AJAX获取JSON: (我正在使用Framework7 - 因此$$)
$$.ajax({
url: "my-site-here.php",
dataType: "json",
beforeSend: function(XMLHttpRequest) {
//Download Progress Attempt (Found By Googling)
XMLHttpRequest.addEventListener("progress", function(evt){
//console.log("Downloaded: " + evt.loaded) <-- THIS IS WORKING;
//console.log("Total: " + evt.total) <-- THIS RETURNS 0;
var percentComplete = evt.loaded / evt.total;
console.log(percentComplete);
if (evt.lengthComputable) {
var percentComplete = evt.loaded / evt.total;
console.log(percentComplete);
} else {
// console.log("Cannot Compute File Size"); <-- THIS IS WHAT OUTPUTS
}
}, false);
},
success: function(json) {
// GETS DATA, RENDERS IT
}
});
提前感谢您的一些见解!
答案 0 :(得分:1)
我在这里找到了这个解决方案:https://stackoverflow.com/a/24073356/2163226。
我所要做的就是编辑我的.htaccess文件以显示Content-Length标头。 现在一切都按预期工作了!
谢谢大家的帮助和建议!
答案 1 :(得分:0)
编辑 - 误解了请求流程。