具有离线开发的外部JSON数据

时间:2009-10-02 05:03:11

标签: javascript jquery json offline

我正在开发一个访问一些外部JSON数据的Web应用程序。我目前正在使用jQuery的getJSON来获取数据并调用回调。

我家的网络很糟糕,所以我经常没有联系。我正在寻找一种方法来开发这个应用程序,同时断开互联网。

我最初的想法是设置一个OFFLINE变量,它将脚本的位置更改为本地文件,但由于jQuery的getJSON使用动态命名的函数进行回调,因此需要一些服务器智能。

有关getJSON回调如何在此处工作的更多信息:http://docs.jquery.com/Ajax/jQuery.getJSON

我确信这是一种更简单的方法。有什么建议吗?

** 修改 **

让我试着澄清一下 我目前正在运行本地Web服务器。我必须 - 出于安全原因,脚本标签无法引用本地文件。

我目前正在使用网址调用getJSON:http://twitter.com/status/user_timeline/user.json?callback=

如果我下载了json响应并将其托管在本地网络服务器上,它将无法工作,因为回调名称每次都会更改,但Feed将具有最初提取的功能名称。

4 个答案:

答案 0 :(得分:1)

我有类似的问题。尝试使用xampp在您的计算机上轻松安装php / apache / mysql。

我使用dreamhost来托管我的网站。我使用subversion存储库管理所有内容,当我准备好进行更改时,我可以在我的实时网站上执行'svn update'。

我还定义了相对于base_url变量的所有路径,该变量根据http主机设置,因此我不需要为我的站点更改任何内容以在不同的Web服务器上运行。我使用codeigniter,我的配置文件如下所示:

switch($_SERVER['HTTP_HOST']) {

    case "claytonhp":
        $config['base_url'] = "http://claytonhp/<project_url>";
        break;  

    // etc.
}

要在我的javascript中使用相同的路径,我将以下内容放在每个html文件的顶部:

<script type="text/javascript">
  siteUrl = '<?= base_url();?>';
</script>
<script type="text/javascript" src="<?= base_url();?>public/scripts/external/jquery/jquery.js"></script>                

<!-- Local functionality -->
<script type="text/javascript" src="<?= base_url();?>public/scripts/common.js"></script>
<!-- etc -->

然后,我的jquery ajax调用看起来像这样:

$.ajax({
        type: "POST",
        url: siteUrl + "index.php/ajax_controller/getSomeData",
        dataType: "json",
        data: "id=5",
        success: successCallback,
        error: errorCallback
   });

答案 1 :(得分:0)

只需使用Web服务器(IIS内置于Windows中,或者使用Apache,否则使用XAMP)。这样,您就可以始终连接到您的网站(使用http://localhost/..。)。

答案 2 :(得分:0)

快速解决方案是运行本地Web服务器。出于各种原因,这是一个好主意。

如果您不想这样做,只需定义URL以从全局某处获取JSON,并将其传递给getJSON()。在将代码放到服务器上之前,不要忘记将其重新设置。

答案 3 :(得分:0)

我使用了本地sinatra网络服务器,并替换了/ etc / hosts文件中的主机。这很好,因为定义新服务非常容易。

我经常忘记重置我的hosts文件,这会导致很多挫折,所以我创建了一个脚本来包装整个文件。

以下是一个提供Twitter用户Feed的示例。

<强> run.sh

#!/bin/bash
cp /etc/hosts /etc/hosts.original
cat offline_hosts >> /etc/hosts
ruby server.rb -p 80
cp /etc/hosts.original /etc/hosts

<强> offline_hosts

127.0.0.1   twitter.com

<强> server.rb

#!/usr/bin/ruby
require 'sinatra'

# twitter user
# http://twitter.com/status/user_timeline/$USER.json&callback=?
get '/status/user_timeline/:username.json', :host_name => /twitter\.com/ do
  render_file "feeds/#{params[:username]}.json"
end

def render_file filename
  output = File.open(filename).read
  output = "#{params[:callback]}(#{output});" if params[:callback]
  output
end