GVKun编程网logo

JavaScript / jQuery通过JSON数据通过POST下载文件

14

以上就是给各位分享JavaScript/jQuery通过JSON数据通过POST下载文件,同时本文还将给你拓展javascript-jquery获取json数据问题、JavaScript/jQuery

以上就是给各位分享JavaScript / jQuery通过JSON数据通过POST下载文件,同时本文还将给你拓展javascript - jquery获取json数据问题、JavaScript / jQuery通过POST使用JSON数据下载文件、javascript – Google Maps v3通过jQuery $.ajax和json添加标记、javascript – jQuery Ajax POST JSON问题等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

JavaScript / jQuery通过JSON数据通过POST下载文件

JavaScript / jQuery通过JSON数据通过POST下载文件

我有一个基于jquery的单页webapp。它通过AJAX调用与RESTful Web服务进行通信。

我正在尝试完成以下任务:

  1. 将包含JSON数据的POST提交到REST URL。
  2. 如果请求指定JSON响应,则返回JSON。
  3. 如果请求指定PDF / XLS / etc响应,则返回可下载的二进制文件。
    我现在有1&2,并且客户端jquery应用通过基于JSON数据创建DOM元素在网页上显示返回的数据。从Web服务的角度来看,我也有#3的工作,这意味着如果给出正确的JSON参数,它将创建并返回一个二进制文件。但是我不确定在客户端JavaScript代码中处理#3的最佳方法。

是否可以从像这样的ajax调用取回可下载文件?如何让浏览器下载并保存文件?

$.ajax({    type: "POST",    url: "/services/test",    contentType: "application/json",    data: JSON.stringify({category: 42, sort: 3, type: "pdf"}),    dataType: "json",    success: function(json, status){        if (status != "success") {            log("Error loading data");            return;        }        log("Data loaded!");    },    error: function(result, status, err) {        log("Error loading data");        return;    }});

服务器使用以下标头进行响应:

Content-Disposition:attachment; filename=export-1282022272283.pdfContent-Length:5120Content-Type:application/pdfServer:Jetty(6.1.11)

另一个想法是生成PDF并将其存储在服务器上,并返回包含文件URL的JSON。然后,在ajax成功处理程序中发出另一个调用,以执行以下操作:

success: function(json,status) {    window.location.href = json.url;}

但这意味着我需要对服务器进行多个调用,并且服务器需要构建可下载文件,将它们存储在某个地方,然后定期清理该存储区域。

必须有一种更简单的方法来完成此任务。有想法吗?

编辑:审查了$ .ajax的文档后,我看到响应数据类型只能是之一xml, html, script, json, jsonp, text,因此我猜测没有办法直接使用ajax请求下载文件,除非我在使用中嵌入了二进制文件@VinayC答案中建议的数据URI方案(我不想这样做)。

所以我想我的选择是:

  1. 不使用ajax,而是提交表单发布,并将我的JSON数据嵌入到表单值中。可能需要弄乱隐藏的iframe等。

  2. 不使用ajax,而是将我的JSON数据转换为查询字符串以构建标准的GET请求,并将window.location.href设置为此URL。可能需要在我的点击处理程序中使用event.preventDefault(),以防止浏览器从应用程序URL更改。

  3. 使用我上面的其他想法,但通过@naikus答案的建议进行了增强。提交带有一些参数的AJAX请求,该参数使Web服务知道通过ajax调用正在调用该参数。如果从ajax调用中调用了Web服务,则只需将带有URL的JSON返回到生成的资源即可。如果直接调用资源,则返回实际的二进制文件。

我思考得越多,我越喜欢最后一个选择。这样,我可以获取有关请求的信息(生成时间,文件大小,错误消息等),并且可以在开始下载之前对这些信息进行操作。缺点是服务器上的额外文件管理。

还有其他方法可以做到这一点吗?我应该知道这些方法的利弊吗?

答案1

小编典典

letronje的解决方案仅适用于非常简单的页面。document.body.innerHTML +=接受正文的HTML文本,附加iframe HTML,然后将页面的innerHTML设置为该字符串。这将抹除您的页面具有的所有事件绑定。创建一个元素并appendChild改为使用。

$.post(''/create_binary_file.php'', postData, function(retData) {  var iframe = document.createElement("iframe");  iframe.setAttribute("src", retData.url);  iframe.setAttribute("style", "display: none");  document.body.appendChild(iframe);}); 

或使用jQuery

$.post(''/create_binary_file.php'', postData, function(retData) {  $("body").append("<iframe src=''" + retData.url+ "''display: none;'' ></iframe>");}); 

这实际上是做什么的:使用变量postData中的数据执行到/create_binary_file.php的发布;如果该帖子成功完成,则在页面正文中添加一个新的iframe。假设来自/create_binary_file.php的响应将包含值’url’,这是可从中下载生成的PDF / XLS / etc文件的URL。假定Web服务器具有适当的mime类型配置,则将iframe添加到引用该URL的页面将导致浏览器提示用户下载文件。

javascript - jquery获取json数据问题

javascript - jquery获取json数据问题

javascript - jquery获取json数据问题

我用ajax请求了后端获取的天气API数据,然后在success里面怎么回去weather_data里面第一组数据中的date呢?
只要这一个数据

回复内容:

javascript - jquery获取json数据问题

我用ajax请求了后端获取的天气API数据,然后在success里面怎么回去weather_data里面第一组数据中的date呢?
只要这一个数据

直接把weather_data这个数组的索引写死。console.log(weather_data[0][''date'']);

立即学习“Java免费学习笔记(深入)”;

你这个是手机端接口吗?

JavaScript / jQuery通过POST使用JSON数据下载文件

JavaScript / jQuery通过POST使用JSON数据下载文件

我有一个基于jquery的单页webapp.它通过AJAX调用与RESTful Web服务进行通信.

我正在努力完成以下任务:

>将包含JSON数据的POST提交到REST URL.
>如果请求指定了JSON响应,则返回JSON.
>如果请求指定了PDF / XLS / etc响应,则返回可下载的二进制文件.

我有1& 2现在正在工作,客户端jquery app通过基于JSON数据创建DOM元素来显示网页中返回的数据.从Web服务的角度来看,我也有#3工作,这意味着如果给出正确的JSON参数,它将创建并返回二进制文件.但我不确定在客户端javascript代码中处理#3的最佳方法.

是否有可能从这样的ajax调用中获取可下载的文件?如何让浏览器下载并保存文件?

$.ajax({
    type: "POST",
    url: "/services/test",
    contentType: "application/json",
    data: JSON.stringify({category: 42, sort: 3, type: "pdf"}),
    dataType: "json",
    success: function(json, status){
        if (status != "success") {
            log("Error loading data");
            return;
        }
        log("Data loaded!");
    },
    error: function(result, status, err) {
        log("Error loading data");
        return;
    }
});

服务器响应以下标头:

Content-disposition:attachment; filename=export-1282022272283.pdf
Content-Length:5120
Content-Type:application/pdf
Server:Jetty(6.1.11)

另一个想法是生成PDF并将其存储在服务器上并返回包含该文件的URL的JSON.然后,在ajax成功处理程序中发出另一个调用,执行以下操作:

success: function(json,status) {
    window.location.href = json.url;
}

但这样做意味着我需要对服务器进行多次调用,而我的服务器需要构建可下载的文件,将它们存储在某处,然后定期清理该存储区域.

必须有一种更简单的方法来实现这一目标.想法?

编辑:在查看$.ajax的文档后,我看到响应dataType只能是xml,html,script,json,jsonp,text之一,所以我猜测没有办法直接下载文件使用ajax请求,除非我按照@VinayC答案中的建议使用数据URI方案嵌入二进制文件(这不是我想做的事情).

所以我想我的选择是:

>不使用ajax而是提交表单帖子并将我的JSON数据嵌入到表单值中.可能需要搞乱隐藏的iframe等.
>不使用ajax而是将我的JSON数据转换为查询字符串以构建标准GET请求并将window.location.href设置为此URL.可能需要在我的单击处理程序中使用event.preventDefault()以防止浏览器从应用程序URL更改.
>使用我上面的其他想法,但通过@naikus答案的建议增强.使用一些参数提交AJAX请求,该参数允许Web服务知道通过ajax调用调用它.如果从ajax调用调用Web服务,只需返回带有URL的JSON到生成的资源.如果直接调用资源,则返回实际的二进制文件.

我想的越多,我越喜欢最后一个选项.通过这种方式,我可以获得有关请求的信息(生成时间,文件大小,错误消息等),我可以在开始下载之前对该信息采取行动.缺点是服务器上的额外文件管理.

还有其他方法吗?我应该注意这些方法的任何利弊?

解决方法:

letronje的解决方案仅适用于非常简单的页面. document.body.innerHTML =获取正文的HTML文本,附加iframe HTML,并将页面的innerHTML设置为该字符串.这将消除您的页面具有的任何事件绑定,以及其他内容.创建一个元素并改为使用appendChild.

$.post('/create_binary_file.PHP', postData, function(retData) {
  var iframe = document.createElement("iframe");
  iframe.setAttribute("src", retData.url);
  iframe.setAttribute("style", "display: none");
  document.body.appendChild(iframe);
}); 

或者使用jQuery

$.post('/create_binary_file.PHP', postData, function(retData) {
  $("body").append("<iframe src='" + retData.url+ "'></iframe>");
}); 

这实际上是做什么的:用变量postData中的数据对/create_binary_file.PHP执行一个帖子;如果该帖子成功完成,请将新的iframe添加到页面正文中.假设来自/create_binary_file.PHP的响应将包含值’url’,这是可以从中下载生成的PDF / XLS / etc文件的URL.假设Web服务器具有适当的mime类型配置,将iframe添加到引用该URL的页面将导致浏览器促使用户下载该文件.

javascript – Google Maps v3通过jQuery $.ajax和json添加标记

javascript – Google Maps v3通过jQuery $.ajax和json添加标记

我有问题是使用 jquery将地图标记添加到gmaps.到目前为止,这是我的代码.

现在,我得到的错误是Uncaught ReferenceError:未定义GLatLng

地图加载正常,正在获取和解析json数据…从我可以告诉…;)

添加地图引脚/标记或w / e你称之为em …

EventsModel.prototype.fetchMapPoints = function()
{
    $.ajax({
        dataType: "json",url: '../../events/map',success: eventsV.writeMapPoints
    });
}

EventsView.prototype.writeMapPoints = function(Locations)
{
    if (Locations.length>0) { 
      for (i=0; i<Locations.length; i++) { 
        var location = Locations[i]; 
        eventsV.addMapPin(location); 
      } 
      //zoomToBounds(); 
    }
}

EventsView.prototype.addMapPin = function(location)
{
    var point = new GLatLng(location.lat,location.lng); 
    var marker = new GMarker(point); 
    map.addOverlay(marker); 
    bounds.extend(marker.getPoint()); 
    $("<li />")
    .html(location.name) 
    .click(function(){ 
      showMessage(marker,location.name); 
    }) 
    .appendTo("#list"); 
    GEvent.addListener(marker,"click",function(){ 
    showMessage(this); 
    }); 

}

地图初始化

EventsModel.prototype.fetchGmapScript = function()
{
    var script = document.createElement("script");
    script.type = "text/javascript";
    script.src = "http://maps.google.com/maps/api/js?sensor=false&callback=eventsV.initializeMap";
    document.body.appendChild(script);
}

EventsView.prototype.initializeMap = function()
{
    var myLatlng = new google.maps.LatLng(coords.lat,coords.long);
    var myOptions = {
    zoom: 13,center: myLatlng,mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    map = new google.maps.Map(document.getElementById("Map"),myOptions);
}

这是json数据的样子

[{"Event":"c16a5320fa475530d9583c34fd356ef5","lat":"37.8966942","lng":"-122.0599376","Image":"321752348.png","name":"Winning apple store","Description":""},{"Event":"b6d767d2f8ed5d21a44b0e5886680cb9","lat":"37.8995050","lng":"-122.0619770","Image":"","name":"Koreana Kitchen","Description":"Peter isn't invited!"}]

解决方法

就像错误说的那样,GLatLng没有定义. GLatLng来自Google Maps API的第2版,但您使用的是版本3,因此将其更改为google.maps.LatLng至少应该将其排除在外.

javascript – jQuery Ajax POST JSON问题

javascript – jQuery Ajax POST JSON问题

我正在尝试将 JavaScript数组传递到PHP脚本,然后将其放入数据库,但我遇到了问题.我在发送之前在数组上使用了JSON.stringify.该请求似乎有效,因为当逐步调试代码调试时,调用PHP页面但没有数据传递到POST全局.我敢肯定,我错过了一些业余爱好,但我很挣扎.这是代码: –

$.ajax({
    type: "POST",datatype: "json",url: "processdraw.PHP",data: {
        json: pDrawnTeams
    },contentType: "application/json; charset=utf-8",success: alert('worked')
})

解决方法

如果你的javascript没有收到任何错误,请确保你在PHP目标文件中获得这样的参数:

$myJSON = $_POST['json']; // ['parameter name']

之后你需要解码那个json

$myData = json_decode($myJSON,true) // true is for retrieving as an array

今天关于JavaScript / jQuery通过JSON数据通过POST下载文件的讲解已经结束,谢谢您的阅读,如果想了解更多关于javascript - jquery获取json数据问题、JavaScript / jQuery通过POST使用JSON数据下载文件、javascript – Google Maps v3通过jQuery $.ajax和json添加标记、javascript – jQuery Ajax POST JSON问题的相关知识,请在本站搜索。

本文标签: