如何使用 JSONP 下载客户端 javascript 对象?

Posted

技术标签:

【中文标题】如何使用 JSONP 下载客户端 javascript 对象?【英文标题】:How can I use JSONP to download client-side javascript objects? 【发布时间】:2011-01-27 06:08:40 【问题描述】:

我正在尝试将客户端 javascript 对象保存为本地文件。我不确定这是否可能。

基本架构是这样的:

    Ping 外部 API 以获取 JSON 对象 使用该对象在客户端工作,并最终获得“下载我”链接 此链接将数据发送到我的服务器,服务器对其进行处理并使用 mime 类型 application/json 将其发回,这(应该)提示用户在本地下载文件。

现在这里是我的作品:

服务器端代码

<?php
$data = array('zero', 'one', 'two', 'testing the encoding');  
$json = json_encode($data);  
//$json = json_encode($_GET['']); //eventually I'll encode their data, but I'm testing
header("Content-type: application/json"); 
header('Content-Disposition: attachment; filename="backup.json"'); 
echo $_GET['callback'] . ' (' . $json . ');';
?>

相关客户端代码

$("#download").click(function()
    var json = JSON.stringify(collection); //serializes their object
    $.ajax(
       type: "GET",
       url: "http://www.myURL.com/api.php?callback=?", //this is the above script
       dataType: "jsonp",
       contentType: 'jsonp',
       data: json,
       success: function(data)
           console.log( "Data Received: " + data[3] );
       
    );
    return false;
);

现在,当我使用 Firefox 访问 api.php 站点时,它会提示下载 download.json,并按预期生成此文本文件:

 (["zero","one","two","testing the encoding"]);

当我单击#download 运行 AJAX 调用时,它会登录 Firebug

Data Received: testing the encoding

这几乎是我所期望的。我正在接收 JSON 字符串并对其进行序列化,这很棒。我错过了两件事:

实际问题

    我需要做些什么才能获得与在浏览器中访问页面时相同的提示下载行为 (更简单)如何在服务器端访问发送到服务器以对其进行序列化的 json 对象?我不知道它在 GET 数组中的索引是什么(很傻,我知道,但我几乎尝试了所有方法)

【问题讨论】:

【参考方案1】:
    您需要告诉浏览器访问该页面,通常通过设置window.location。 由于它是一个字符串,它将作为原始查询字符串的一部分发送。尝试在 $_SERVER['QUERY_STRING'] 中查找。

【讨论】:

以上是关于如何使用 JSONP 下载客户端 javascript 对象?的主要内容,如果未能解决你的问题,请参考以下文章

使用 JSONP 或 CORS 的跨域 JavaScript 调用

跨域总结-JSONP和XHR2

是否可以在服务器上使用 JSONP?

net core 3.1 MVC如何返回JSONP

同源策略:JSONP和CORS

jsonp的原理与实现