Javascript 离线开发的外部JSON数据
我正在开发一个web应用程序,可以访问一些外部JSON数据。我目前正在使用jQuery的getJSON获取数据并调用回调 我在家上网很糟糕,所以我经常不上网。我正在寻找一种在断开互联网连接的情况下开发此应用程序的方法 我最初的想法是设置一个离线变量,将脚本的位置更改为本地文件,但由于jQuery的getJSON使用动态命名函数进行回调,因此需要一些服务器智能 有关getJSON回调如何工作的更多信息,请参见此处: 我相信有更简单的方法。有什么建议吗 **编辑** 让我试着澄清一下 我目前正在运行一个本地web服务器。我必须-出于安全原因,脚本标记不能引用本地文件 我当前正在使用url调用getJSON:Javascript 离线开发的外部JSON数据,javascript,jquery,json,offline,Javascript,Jquery,Json,Offline,我正在开发一个web应用程序,可以访问一些外部JSON数据。我目前正在使用jQuery的getJSON获取数据并调用回调 我在家上网很糟糕,所以我经常不上网。我正在寻找一种在断开互联网连接的情况下开发此应用程序的方法 我最初的想法是设置一个离线变量,将脚本的位置更改为本地文件,但由于jQuery的getJSON使用动态命名函数进行回调,因此需要一些服务器智能 有关getJSON回调如何工作的更多信息,请参见此处: 我相信有更简单的方法。有什么建议吗 **编辑** 让我试着澄清一下 我目前正在运行
如果我下载了json响应并将其托管在本地web服务器上,它将无法工作,因为回调名称每次都会更改,但提要将具有最初获取时使用的函数名。只需使用web服务器即可(IIS内置于Windows中,或者使用Apache或XAMP)。这样,您就可以始终连接到您的网站(使用)。快速解决方案是只运行本地web服务器。出于各种原因,这是一个好主意
如果不想这样做,只需定义从全局某处获取JSON的URL,并将其传递给getJSON()。在将代码放到服务器上之前,请不要忘记将其设置回原位。我也有类似的问题。尝试在您的计算机上轻松安装php/apache/mysql 我用它来主持我的网站。我使用subversion存储库管理一切,当我准备好引入更改时,它允许我在我的实时站点上简单地执行“svn更新” 我还定义了与
base\u url
变量相关的所有路径,该变量是根据http主机设置的,因此我不必更改任何内容,我的站点就可以在不同的Web服务器上运行。我使用codeigniter,我的配置文件如下所示:
switch($_SERVER['HTTP_HOST']) {
case "claytonhp":
$config['base_url'] = "http://claytonhp/<project_url>";
break;
// etc.
}
$.ajax({
type: "POST",
url: siteUrl + "index.php/ajax_controller/getSomeData",
dataType: "json",
data: "id=5",
success: successCallback,
error: errorCallback
});
我使用了本地sinatra Web服务器,并替换了/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
离线\u主机
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
#!/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