`
caiyuanmao
  • 浏览: 3735 次
  • 来自: 深圳
社区版块
存档分类
最新评论

rails和js 进行json格式数据,post交互

 
阅读更多

这里使用rails版本为 4.0.0

windows平台

前台js执行post请求的函数为:

function get_data(){
json={
user_id:1
}

         $.ajax({
             type: "POST",
             url: "say/get_data",
             data: json,
             dataType: "json",
             success: function(data, textStatus){
			// var data = eval("("+data+")");#这个地方不建议使用eval执行,据网上别人说,会引起恶意代码被执行
			  $.each(data,function(item) {;
			        $('body').append("<div>" + data[item] + "</div>");
			 });

                      },
			 error:function(data){
			         alert("请求后台数据出错")
			       }
         });     
      
}

 后台rails代码为:

 

class SayController < ApplicationController
  def hello
  end

  def get_data
  p params
  p params["user_id"]
  p "1"*88

    json_str = "{'xx':'1111', 's':'2222'}" 
    respond_to do |format|
          #format.json {render json: json_str.to_json }#如果用json字符串,则需要通过to_json转化格式返回给前台js,那么前台需要执行eval来再次转换格式
	    format.json {render json: {'xx'=>"22",'dd'=>33} }  #此处建议使用hash格式数据返回,这样前台js就无需执行eval来转换格式
    end
  end
end

 

开始运行后,第一次是报这种错误

 Started POST "/say/get_data" for 127.0.0.1 at 2016-01-24 21:19:44 +0800

ActionController::RoutingError (No route matches [POST] "/say/get_data"):

 

这是因为我们rails后台控制器的get_data发法是手工添加进来的,需要添加相应的routes

我们需要在config/routes.rb文件中,增加一行post 'say/get_data',为rails增加post请求的路由。

Demo2::Application.routes.draw do
  resources :products

  get "say/hello"
  post 'say/get_data'   #为get_data增加post请求路由
end

 

第二次运行已经报错:

Started POST "/say/get_data" for 127.0.0.1 at 2016-01-24 21:24:29 +0800
Processing by SayController#get_data as JSON
  Parameters: {"user_id"=>"1"}
Can't verify CSRF token authenticity
Completed 422 Unprocessable Entity in 1ms

这是因为我们rails后台做了csrf鉴权(按理说前台做了crsf头部,应该有权限才对,这个暂时不会),需要屏蔽它

class ApplicationController < ActionController::Base
  # Prevent CSRF attacks by raising an exception.
  # For APIs, you may want to use :null_session instead.
  protect_from_forgery with: :exception
  skip_before_filter :verify_authenticity_token  #这行代码用来取消crsf鉴权
end

 

至此,前台的js已经可以正常进行后台post请求json格式数据了。

其中,个人比较推荐只用hash格式返回json数据的,这样比较方便组装数据,并且前台无需执行eval,更安全些

 

分享到:
评论

相关推荐

    用REST Client 通过cgi接口测试网页前后端数据交互

    CJSON(Compact JSON)是一个轻量级的库,用于在C语言中解析和生成JSON(JavaScript Object Notation)数据。JSON是一种常见的数据交换格式,因其简洁和易于人读的特点,在Web服务中广泛使用。CJSON库能够帮助将数据...

    ruby on rails API

    2. JSON数据交换格式:在Rails API中,JSON是最常见的数据交换格式。Rails内置了JSON支持,可以方便地将模型对象转换为JSON格式,反之亦然。开发者可以通过`to_json`方法将ActiveRecord对象转换为JSON字符串,供...

    rails-api-4.0.0

    3. JSON优先:默认支持JSON格式的数据交换,方便与前端或其他服务进行数据交互。 4. 小巧的Gemfile:只包含构建API所需的基本gem,减少了依赖性,提高部署效率。 二、RESTful API设计原则: 1. 资源导向:API应以...

    使用jsonapi设计的Rails应用程序的基本示例_Ruby_Java.zip

    在这个基本示例中,我们将探讨如何在Ruby on Rails框架中实现JSONAPI,以及如何与Java客户端进行交互。 一、Ruby on Rails与JSONAPI Ruby on Rails 提供了强大的模型-视图-控制器(MVC)架构,使得开发RESTful API...

    Ajax on Rails

    Ajax(异步JavaScript和XML)技术允许开发者在不刷新整个页面的情况下更新部分网页内容,从而提供更流畅、响应更快的交互体验。而Ruby on Rails(简称Rails)是一个流行的开源Web开发框架,它遵循“约定优于配置”的...

    Rails GUI Development with Ext JS 10-Jan-08 RUG-B.pdf

    - **Controller(控制器)**:作为 RESTful Web 服务,提供特殊格式 `ext_json`,处理页面流控制和重定向等。 - **View(视图)**:负责布局、DOM 结构,并包含 JavaScript 代码,用于程序化地操作 GUI 和交互逻辑。...

    应用Rails进行REST开发

    c) **减少重复代码**:DRY(Don't Repeat Yourself)原则的应用,使得控制器代码更精简,因为一个action可以处理多种数据格式的请求。 d) **面向CRUD的控制器**:控制器专注于处理创建(CREATE)、读取(RETRIEVE)...

    Rails上的API:使用Rails构建REST APIAPIs on Rails: Building REST APIs with Rails

    3. **选择数据格式**:确定API返回的数据格式,通常是JSON或XML。对于大多数现代应用来说,JSON更受欢迎,因为它更加轻量级且易于解析。 4. **实现认证和授权机制**:为了保证API的安全性,需要实现用户认证和权限...

    RESTful Rails Development

    例如,可以设置根据请求的类型(如 JSON 或 HTML)返回不同的数据格式。 - **1.7.3 HTTP 头部的 Accept 字段**:客户端可以通过发送带有 `Accept` 头部的请求来指定期望接收的响应格式。 - **1.7.4 通过 URL 规定...

    rales_engine:在这个项目中,我们将使用 Rails 和 ActiveRecord 构建一个公开 SalesEngine 数据模式的 JSON API

    在本项目"rales_engine"中,我们主要聚焦于利用Ruby on Rails框架和ActiveRecord库来创建一个基于JSON API的数据接口,它将公开SalesEngine的数据模式。Rails是Ruby语言的一个热门Web开发框架,以其MVC(Model-View-...

    使用RSpec 测试Rails 程序.pdf

    - **测试不输出HTML的控制器**:对于仅返回JSON或其他格式数据的控制器,也需要编写相应的测试。 #### 六、功能测试 - **为什么要编写功能测试**:功能测试(也称为端到端测试或接受测试)用于验证整个系统的行为...

    rails-api-4.2.4

    2. **JSON 支持**: 默认支持JSON格式的数据交换,符合现代API设计标准,便于前端与后端交互。 3. **强类型**: Ruby是一种动态类型语言,但Rails API鼓励使用Strong Parameters,确保API参数安全。 4. **路由优化**: ...

    Rails相关电子书汇总二

    8. JSON和XML:了解如何在Rails中生成和消费这些数据格式,以支持API交互。 9. 版本控制:可能涉及到Git的基础知识,因为它是Rails开发的标准版本控制系统。 总的来说,这个压缩包对于想要深入了解Rails框架和...

    RESTful.Rails.Development.2015.10.pdf

    - **数据格式**:常见的数据格式包括JSON和XML,其中JSON因轻量级而更受欢迎。 - **链接关系**:通过Hypermedia as the Engine of Application State (HATEOAS)原则,API可以自我描述其功能,即在响应中包含指向其他...

    rails-2.3.3.zip

    9. **ActiveSupport**:提供了一系列便利的工具类和方法,如时间辅助(time helpers)、JSON编码和字符串扩展等。 10. **配置与初始化**:Rails应用的配置通常位于`config/environments`和`config/initializers`...

    How to RESTful rails

    Rails提供了Rspec和Capybara等工具,支持单元测试、集成测试和功能测试,确保应用符合预期的行为。对于RESTful服务,重点测试包括资源的创建、读取、更新和删除操作,以及错误处理和边缘情况。 ### RESTful认证机制...

    使用Rails5构建的社交网络。使用devise进行身份验.zip

    在本项目中,我们探讨了如何使用Ruby on Rails 5框架构建一个社交网络平台,并集成Devise进行身份验证。Rails是基于MVC(模型-视图-控制器)架构模式的开源Web应用程序框架,它使开发者能够高效地创建数据驱动的网站...

    jsgrid-rails:带有Ruby on Rails REST服务的jsgrid的示例项目

    - **JSON响应**:控制器返回JSON格式的数据,jsGrid可以解析并显示在前端。 - **前端设置**:在HTML页面中引入jsGrid库,配置数据源为Rails的API端点,并定义列配置、编辑和验证规则。 ### 4. 示例项目结构 在`js...

    EmberRailsCarsExample:集成 Ember.js 和 Rails 的示例

    4. **组件交互**:EmberRailsCarsExample可能包含多个自定义组件,比如汽车列表、汽车详情等,这些组件会与Rails API进行交互,显示和编辑数据。 学习这个示例项目,你可以了解如何: 1. **设置Ember CLI**:初始...

Global site tag (gtag.js) - Google Analytics