0

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

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

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

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

我敢肯定有一个更简单的方法。有什么建议么?

**编辑**

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

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

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

4

4 回答 4

1

我有一个类似的问题。尝试使用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
   });
于 2009-10-02T05:12:33.043 回答
0

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

于 2009-10-02T05:09:18.887 回答
0

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

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

于 2009-10-02T05:11:33.767 回答
0

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

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

这是一个提供 twitter 用户提要的示例。

运行.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

离线主机

127.0.0.1   twitter.com

服务器.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
于 2010-11-13T17:18:59.467 回答