2009-10-02 63 views
0

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

我在家里的互联网是可怕的,所以我经常没有连接。我正在寻找一种方式来开发这个应用程序,而从互联网断开。

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

更多信息:http://docs.jquery.com/Ajax/jQuery.getJSON

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

** 编辑 **

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

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

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

回答

0

我用了一个本地网络服务器西纳特拉,在我的/ 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 
0

只需使用Web服务器(IIS内置于Windows中,否则使用Apache或XAMP)。这样,你总是连接到你的网站(使用http://localhost/..)。

0

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

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

1

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

我用dreamhost来承载我的网站。我用一个subversion版本库管理所有东西,当我准备好引入我的更改时,我可以在我的现场网站上简单地执行'svn update'。

我还定义了所有我的路径相对于一个base_url变量,这是根据http主机设置的,所以我不必改变任何东西让我的网站在不同的web服务器上运行。我用笨,我的配置文件看起来像这样:

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 
    });