离线开发的外部JSON数据

发布于 2024-08-06 15:12:42 字数 784 浏览 5 评论 0原文

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

我家里的网络很糟糕,所以我经常无法连接。我正在寻找一种在与互联网断开连接的情况下开发此应用程序的方法。

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

有关 getJSON 回调如何工作的更多信息,请参见:http://docs.jquery.com/Ajax/jQuery .getJSON

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

** 编辑 **

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

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

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

I am developing a web app that accesses some external JSON data. I'm currently using jQuery's getJSON to get the data and call the callback.

My internet at home is terrible, so I'm regularly not connected. I am looking for a way to develop this app while disconnected from the internet.

My initial thought was to have an OFFLINE variable that I set, which changes the location of the scripts to a local file, but because jQuery's getJSON uses dynamically named functions for callbacks, it would need some server intelligence.

More info on how getJSON callbacks work here: http://docs.jquery.com/Ajax/jQuery.getJSON

I'm sure there's an easier way. Any suggestions?

** Edit **

Let me try and clarify a bit
I'm currently running a local web server. I have to - script tags can't reference a local file, for security reasons.

I'm currently calling getJSON with the url: http://twitter.com/status/user_timeline/user.json?callback=?

If I downloaded that json response and hosted it on the local webserver, it wouldn't work, because the callback name will change every time, yet the feed will have the function name it was originally fetched with.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

赠佳期 2024-08-13 15:12:43

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

Just use a web server (IIS is built into Windows, or use Apache, or XAMP otherwise). That way, you're always connected to your web site (use http://localhost/...).

棒棒糖 2024-08-13 15:12:43

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

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

Quick solution is to just run a local web server. This is a good idea for all sorts of reasons.

If you don't want to do that, just define the URL to get the JSON from somewhere global, and pass it to getJSON(). Just don't forget to set it back before you put your code up on the server.

So尛奶瓶 2024-08-13 15:12:43

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

我经常忘记重置主机文件,这可能会导致很多挫败感,因此我也创建了一个脚本来包装整个事情。

下面是一个提供 Twitter 用户提要的示例。

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

I used a local sinatra webserver, and replaced the hosts in my /etc/hosts file. It's nice because it's super easy to define new services.

I often forget to reset my hosts file, which can cause a lot of frustration, so I created a script to wrap the whole thing as well.

Here's an example that will serve up a twitter user 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
寻找我们的幸福 2024-08-13 15:12:42

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

我使用 dreamhost 托管我的网站。我使用 subversion 存储库管理一切,这使我可以在准备好引入更改时在我的实时站点上简单地执行“svn update”。

我还定义了相对于 base_url 变量的所有路径,该变量是根据 http 主机设置的,因此我无需更改任何内容即可让我的网站在不同的网络服务器上运行。我使用 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
   });

I have a similar problem. Try xampp for an easy php/apache/mysql install on your machine.

I use dreamhost to host my site. I manage everything with a subversion repository, which allows me to simply do 'svn update' on my live site when I am ready to pull in my changes.

I also define all my paths relative to a base_url variable, which is set depending on the http host, so I don't have to change anything for my site to run on different webservers. I use codeigniter, and my config file looks like this:

switch($_SERVER['HTTP_HOST']) {

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

    // etc.
}

To use that same path in my javascript, I put the following at the top of each html file:

<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 -->

Then, my jquery ajax calls look like this:

$.ajax({
        type: "POST",
        url: siteUrl + "index.php/ajax_controller/getSomeData",
        dataType: "json",
        data: "id=5",
        success: successCallback,
        error: errorCallback
   });
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文