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

时间:2010-03-13 21:05:45

标签: php javascript ajax json jsonp

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

基本架构是:

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

    服务器端代码

    <?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字符串并将其序列化,这很棒。我错过了两件事:

    实际问题

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

1 个答案:

答案 0 :(得分:2)

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