推荐 最新
博学的学渣

php中生成了一个excel文件,用ajax怎么接受?

下面是一个生成excel的接口,我直接在浏览器上请求接口,会直接叫我下载一个excel文件。 public function index() { $spreadsheet = new Spreadsheet(); $sheet = $spreadsheet->getActiveSheet(); // 设置单元格的值 foreach ($this->tableHeader as $k=>$v){ $chr=chr(65+$k); $sheet->setCellValue($chr."1", $v); } foreach ($this->tableData as $k=>$v){ $vArr=array_values($v); foreach (array_keys($v) as $k2=>$v2){ $chr2=chr(65+$k2).($k+2); $sheet->setCellValue($chr2, $vArr[$k2]); } } // 保存Excel文件到临时目录 $writer = new Xlsx($spreadsheet); $tempFilename = tempnam(sys_get_temp_dir(), $this->fileName); $writer->save($tempFilename); // 设置HTTP头信息,提供文件下载 header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header("Content-Disposition: attachment;filename=$this->fileName.xlsx"); header('Cache-Control: max-age=0'); // 读取临时文件并输出到浏览器 $file = fopen($tempFilename, 'rb'); fpassthru($file); fclose($file); // 删除临时文件 unlink($tempFilename); } 但是我现在需要用ajax接受这个文件然后再下载。但是下面的一直提示: "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241004/0f4bbf15b2e807b342f8dc0250361148.png) $.ajax({ url: "/portal/AdminLog/homeExcel", type: 'POST', dataType: 'json', xhrFields: { responseType: 'blob' // 设置响应类型为JSON }, data: { "startTime":$('input[name="startTime"]').val(), "endTime":$('input[name="endTime"]').val() }, success: function (blob, status, xhr) { console.log("成功") // 创建一个指向 Blob URL 的链接 var url = window.URL.createObjectURL(blob); // 创建一个新的 a标签用于下载 var a = document.createElement('a'); a.href = url; a.download = 'filename.ext'; // 设置下载文件的名称 // 触发下载 document.body.appendChild(a); a.click(); // 清理 window.URL.revokeObjectURL(url); document.body.removeChild(a); }, error: function () { console.log("失败") }, complete: function () { console.log("完成") } });

0
1
0
浏览量184
博学的学渣

axios为何获取不到服务器返回的sessionID?

VUE3项目,后端是thinkphp。 现在想在页面上显示一个由thinkphp生成的验证码,使用axios跨域来请求这个验证码接口。 现在是验证码图片已经可以显示了,但是就是获取不到请求验证码时服务器生成的sessionID。但是在浏览器F12网络中,可以看到有set-Cookie;就是在axios返回值中没有这项,axios跨域已经设置了,withCredentials也设置为true了。 axios跨域设置: .... server: { proxy: { '/api': { target: 'https://***.cn', // 目标后端服务器地址 changeOrigin: true, // 是否改变源地址 secure: true, // 是否启用https协议 withCredentials: true, // 是否携带cookie pathRewrite: { '^/api': '', // 重写路径 }, }, }, ..... 验证码页面 .... initCaptcha() { this.$http.get('https://***.cn/api/Validate/verify_code').then(response => { console.log(response); this.setSession(response.header); //this.onRefresh(); }) }, .... 从console.log的结果来看,没有找到set-cookie项 https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20240919/4d8f6738065322a7a444a74dde740ab5.png 但是在F12“网络”项中,能看到有这个项 https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20240919/e6d34939c8ecdcfab6620c216fea6bec.png 查了一圈搜索后发现axios不支持跨域携带cookie,但是我上面已经对axios做了设置。为何在请求返回中还是拿不到这个?

0
1
0
浏览量204
办公室高手

使用AJAX从node.js本地服务器请求文本 运行一直报错?

使用AJAX从服务器请求文件,运行报错 Document // const myobj={name:"Bill",age:21,city:"Guangzhou"}; // const myJSON=JSON.stringify(myobj); // window.location="/demo_json.php?x="+myJSON; // 来自服务器的 JSON 可以使用 AJAX 请求从服务器请求 JSON const xhttp=new XMLHttpRequest(); xhttp.onreadystatechange=function(){ if(this.readyState==4&&this.status==200){ const myobj=JSON.parse(this.responseText); document.getElementById("d1").innerHTML=myobj.name } } xhttp.open("GET","json.txt"); xhttp.send(); 第一次运行时忘记把上面三条代码注释掉,就直接运行,结果浏览器报错 https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241011/dff3afdd2746f481902463161a344739.png 第二次注释了上面的代码,保存之后,重启了node.js本地服务器,再运行几遍,依旧显示之前的错误。为什么会一直运行已经注释了的代码请求? 还有修改了服务器的json文本,运行AJAX请求,responseText获得的结果依旧是原来未修改的文本,这是为什么

0
1
0
浏览量174
万码F5GTP6P0

不同ip地址,不同域名,能通过cors跨域吗?

问题是这样的,可能之前问的有点不好,现在修改下。我用wampserver建立两个站点ajax.com和ajax2.com,两个域名指向的ip地址分别为127.0.0.1,127.0.0.2,但端口同为80(不知怎么改为不同的端口),现在我想在ajax.com下的html文件,发送数据,同时请求ajax2.com的php文件内容,数据一起返回。 <script>function createCORSRequest(method, url, data) { var xhr = new XMLHttpRequest(); if ("withCredentials" in xhr) { xhr.open(method, url, true); //true指的是异步 } else if (typeof XDomainRequest != "undefined") { xhr = new XDomainRequest(); xhr.open(method, url); } else { xhr = null; } if (method === "post") { xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xhr.send(data); } else if (method === "get") { xhr.send(null); } return xhr; } var request = createCORSRequest("post", "http://ajax2.com/AJAX/05-XMLHTTPRequest-test.php","name=jack&age=20"); if (request) { request.onreadystatechange = function() { if (request.readyState == 4 && request.status == 200) { console.log(request.responseText); } }; } </script> <?php header("Content-Type:application/json;charset=utf-8"); header('Access-Control-Allow-Origin:*'); header('Access-Control-Allow-Methods:GET,POST'); header('Access-Control-Allow-Headers:x-requested-with,content-type'); header('Access-Control-Allow-Headers: NCZ'); echo '请求成功'; echo $_POST['name'].' '.$_POST['age']; ?> 这样就算是成功通过cors跨域了吧,然后呢,我是想找个线上的api来测试下,但找不到,能否给个例子看看,感激不尽。还有就是像这种接口这么调用获取数据?网址http://www.bejson.com/knownjs...,例如我想获取京东的数据,该怎么写?

0
1
0
浏览量215
万码用户

面试题:为什么要用闭包? 头像 油炸癞疙宝 58184355 发布于 2016-11-23 更新于

我是学Java的。今天在面试的时候面试官提及匿名类,我说Java8里面提供了Lamada式,在JS里也有闭包这个概念。面试官问什么是闭包?为什么要用闭包? 我说:用来控制访问啊。内部可以访问外部,但是外部不能访问内部。 面试官似乎不是很满意这样的回答。不知各位大神对这个问题有什么看法?

0
0
0
浏览量209
万码F5GTP6P0

XMLHttpRequest Level2中如何监测文件上传服务器的进度?

在XMLHttpRequest2级中添加了progress事件可以监测文件下载的进度,那文件上传进度如何检测? xhr.onprogress=function (e) { console.log(e.positon); console.log(e.totalSize); } 以上代码运行输出的是undefined,在javascript高级程序设计第三版中写到:‘progress事件会在浏览器接收到新数据时候触发,该事件会接收到一个event对象,其中包含三个额外属性,lengthComputable、position、totalSize’这是为什么?如何实现文件上传进度条?

0
1
0
浏览量203
万码F5GTP6P0

Ajax提交表单,所以有没有Form标签有关系吗?

Ajax提交表单,所以有没有Form标签有关系吗?

0
1
0
浏览量201
万码F5GTP6P0

for循环中请求数据接口

for循环请求数据接口,for循环出不同的值,作为请求接口的参数。这种请情况怎么处理?否则接口还没请求完成,for循环就已经执行完了

0
1
0
浏览量200
万码F5GTP6P0

ajax能跨域post吗?

因为目前的项目需要ajax跨域向另一台服务器传大量值,目前跨域ajax也只有$.getJSON的形式,GET貌似不能满足传大量数据的要求,想问一下牛人怎样ajax跨域post

0
1
0
浏览量197
横刀立马007

主流前端往后端发送请求技术,是ajax吗?

现在主流的前端往后端发送请求的技术是什么,ajax吗?ajax必须使用jquery吗?为什么网上都说jquery已经被淘汰了呢? 现在主流的前后端交互技术是什么?

0
1
0
浏览量153