Rails rails ajax 问题请教

xoxoj · 2012年04月29日 · 最后由 xoxoj 回复于 2012年05月01日 · 5254 次阅读
$(function() { $ .ajax({ type : "post", url : "1.json", timeout : 20000, error : function() { alert('服务器错误'); }, async : false, dataType : "json", success : function(data) { var str = ""; var str1 = ""; $("#reg-for-city").suggest(data, { hot_list : data, dataContainer : '#arrcity_3word', attachObject : '#suggest' }); }}); });

以上这段代码,如果应用在 rails 里,应该怎么写啊?是一段关于 ajax 请求数据相关的..

是指使用 rails 的 ajax 功能写吗?可以看一下这个http://ruby-china.org/topics/2798

@cantin 我上面这段是传统的 JS 方式啊。有没有在 RAILS 是用这种传统的方式写的啊?

LZ 需要了解 respond_to 这个 api 和 :json format 的关系。

http://apidock.com/rails/ActionController/MimeResponds/respond_to

额外要做的是在布局里面的 head 部分加上<%= csrf_meta_tags %>,还有 jquery_ujs.js,用来给每个 ajx 请求加上防跨域攻击的 token。

Rails 跟传统的 js 方式结合很好,其实它本身就是很标准的。

@Rei 好的,感谢你的回复,我先查查 respond_to 这个东东!

@Rei 我现在是这样做的,我把这段 AJAX 内容,单独放在了一个 js 文件里,只在注册这个页面,才加载这个 js

$(function() { $ .ajax({ type : "post", url : "http://localhost:3000/jsoncities.json", timeout : 20000, error : function() { alert('服务器错误'); }, //contentType: "application/json", async : false, dataType : "json", success : function(data) { var str = ""; var str1 = "";

$("#reg-for-city").suggest(data, { hot_list : data, dataContainer : '#arrcity_3word', attachObject : '#suggest' }); }}); });

然后,我新建了一个 jsoncities 的 Controller,内容如下

class JsoncitiesController < ApplicationController

respond_to :json

def index @cities = Jsoncities.all respond_with(@cities) end

end

然后再设定了路由:

resources :jsoncities

这个时候,我可以通过http://localhost:3000/jsoncities.jsonJSON格式数据了。按理说,这个时候,我在JS里面调用这个地址,可以正常访问了啊访问到从数据库返回的

url : "http://localhost:3000/jsoncities.json",

可是还是出现这个错误

POST http://localhost:3000/jsoncities.json 404 Not Found

"NetworkError: 404 Not Found - http://localhost:3000/jsoncities.json"

index 默认是 get 请求,而你发的是 post 请求

url 最好别写死,http://localhost:3000这个可以去掉。 rails 中 url 一般不加.html, .json 这类后缀

#5 楼 @xoxoj type 换 get 试试

@cantin 如果不加.json 后缀的话,不会出现 JSON 格式的页面,而是一个空白页面啊

还有一个问题请教一下,就是如何自定义返回 JSON 数据的格式结构啊!

[<%= raw @cities.map { |b| %{["#{b.id}","#{b.name}","#{b.value}"]} }.join(',') %>]

我试过用这种方式,定义 JSON 格式,可是没有效果啊!

现在解析出来的是这种格式:

[

{ "city_bm": "(shanghai)SH", "city_cn": "上海", "city_qp": "shanghai", "city_sx": "sh", "id": 1 }, { "city_bm": "(beijing)BJ", "city_cn": "北京", "city_qp": "beijing", "city_sx": "bj", "id": 2 } ]

我想要的是这种格式:

{ "1":[ "sh", "上海", "(shanghai)SH", "shanghai" ], "2":[ "bj", "北京", "(beijing)BJ", "beijing" ] }

还有一个问题就是,返回的数据是里,如果有中文的话,是这样的 city_cn":"\u4e0a\u6d77", 按理说,RAILS 应该是 UTF8 编码的啊,为什么这里又不显示成 UTF8 呢

搞定了!

需要 登录 后方可回复, 如果你还没有账号请 注册新账号