angular post json数据到服务器,跨域访问,多大括号

 angular.module('myApp',[]).config(function($httpProvider) {
            $httpProvider.defaults.useXDomain = true;
            delete $httpProvider.defaults.headers
                .common['X-Requested-With'];
            $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
            $httpProvider.defaults.headers.put['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
            // Override $http service's default transformRequest
            $httpProvider.defaults.transformRequest = [function(data)
            {
                /**
                 * The workhorse; converts an object to x-www-form-urlencoded serialization.
                 * @param {Object} obj
                 * @return {String}
                 */
                var param = function(obj)
                {
                    var query = '';
                    var name, value, fullSubName, subName, subValue, innerObj, i;

                    for(name in obj)
                    {
                        value = obj[name];

                        if(value instanceof Array)
                        {
                            for(i=0; i<value.length; ++i)
                            {
                                subValue = value[i];
                                fullSubName = name + '[' + i + ']';
                                innerObj = {};
                                innerObj[fullSubName] = subValue;
                                query += param(innerObj) + '&';
                            }
                        }
                        else if(value instanceof Object)
                        {

                            for(subName in value)
                            {

                                subValue = value[subName];
                                if(subValue != null){
                                    // fullSubName = name + '[' + subName + ']';
                                    fullSubName = name + '.' + subName;
                                    // fullSubName =  subName;
                                    innerObj = {};
                                    innerObj[fullSubName] = subValue;
                                    query += param(innerObj) + '&';
                                }
                            }
                        }
                        else if(value !== undefined ) //&& value !== null
                        {
                            query += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&';
                        }
                    }

                    return query.length ? query.substr(0, query.length - 1) : query;
                };

                return angular.isObject(data) && String(data) !== '[object File]' ? param(data) : data;
            }];

        })

感谢,终于找到json数据post到服务器的传输方式,不会再报跨域访问和服务器接收格式的错误

,多个括号的问题烦死我了,({‘{"params1":"xxxx","params2":"cxxxxxx"}‘,‘‘}),终于解决了,

说白了就是转成application/x-www-form-urlencoded , 参数之间加上&

或者你post请求的data,定义由 data: {"params1":"xxxx","params2":"cxxxxxx"}  改成params1="xxxx"&params2="xxxx",

1.以下是我定义,主要用于解决跨域访问,是angularjs CORS提供的标准方式

$httpProvider.defaults.useXDomain = true;

delete $httpProvider.defaults.headers.common[‘X-Requested-With‘];

$httpProvider.defaults.headers.post[‘Content-Type‘] = ‘application/x-www-form-urlencoded;charset=utf-8‘;

$httpProvider.defaults.headers.put[‘Content-Type‘] = ‘application/x-www-form-urlencoded;charset=utf-8‘;

2.

$httpProvider.defaults.transformRequest 这个定义被重写,

帮我们完成了json数据请求转成params1="xxxx"&params2="xxxx"格式



时间: 2024-10-23 20:51:02

angular post json数据到服务器,跨域访问,多大括号的相关文章

ajax获取json数据及实现跨域请求

最近想练习一下ajax获取json数据 , 首先上网找一些在线的可用来测试的接口. -----------------------------------------------------这里是接口分割线 Begin-------------------------------------------------------------------------------------------------- 电商接口 淘宝商品搜索建议: http://suggest.taobao.com/s

解决跨域访问

解决跨域访问的方法 1.用响应头 response.setHeader("Access-Control-Allow-Origin","*");//允许哪些服务器访问 response.setHeader("Access-Control-Allow-Methods","GET POST");//允许的提交方式 2.使用代理 3.JSONP 原理:通过JavaScript标签来访问服务器,并接受服务器返回的数据来实现跨域访问 js

【Python】Bottle框架下Python Web开发的跨域访问

上一篇文章中介绍了Python应用Bottle轻量级框架进行Web开发,这次介绍Bottle框架下的跨域访问的问题. 当前台跨域访问时,会无法从后台得到数据,也就是说跨域访问失败. 解决办法如下: 在程序中定义一个函数代码如下: #!/usr/bin/python # -*- conding:utf-8 -*- from bottle import * #decorator def allow_cross_domain(fn): def _enable_cors(*args, **kwargs)

Ajax + java 跨域访问Json

使用jsonp跨域获取json数据.Ajax获取JAVA服务器json数据. 在Servlet 中代码: protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setHeader("Access-Control-Allow-Origin", "*");//开启CORS,

JSON跨域读取那点事(JSONP跨域访问)

最近在码一个小项目,需要远程读取json.因为需求很少,如果引用jquery使用其getjson方法就显得很浪费嘛= = 这篇文章很详细的解释了JSON跨域读取的前世今生,把原理讲得很透彻.特此分享. 原文链接:http://www.cnblogs.com/dowinning/archive/2012/04/19/json-jsonp-jquery.html 前言: 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强

JSON和JSONP,原来ajax引用这个来实现跨域访问的

由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只能通过AJAX来实现. 当然了,通过调用强大的PhoneGap插件然后打包,你可以实现100%的Socket通讯和本地数据库功能,又或者通过HTML5的WebSocket也可以实现与服务器的通讯和服务端推功能,但这两种方式都有其局限性,前者需要PhoneGap支持,后者要求用户设备必须支持WebSocket,因此都不能算是ST2的原生解决方案,原生的只有AJAX. 说到AJAX就会不可避免的面临两个问题,第一

Geoserver通过ajax跨域访问服务数据的方法(含用户名密码认证的配置方式)

Goeserver数据有两种,一种需进行用户密码的权限认证,一种无须用户密码.对于网上跨域访问Geoserver数据的种种方法,对这2种数据并非通用. 笔者将Geoserver官方下载的Geoserver.war包部署到linux服务器,通过前端 ajax 访问geoserver数据失败,其中包含跨域问题和用户名密码认证问题,查询网上各类方法进行尝试,结果浏览器控制台分别报出了401,403和跨域错误提示.其中: 401错误:ajax未进行用户名密码验证导致: 403错误:用户名密码验证失败导致

使用vue-cli+axios配置代理进行跨域访问数据

1.首先在本地全局安装 vue-cli vue-cli网址:https://github.com/vuejs/vue-cli 先在控制台安装 全局vue-clis npm install -g vue-cli 2.初始化项目(vuecli 项目名称) vue init webpack vuecli //vuecli是项目名 也可以在空项目中输入 vue init webpack 将项目变为 vue-cli项目 3.在vuecli 项目中安装依赖文件 npm install 4.在vuecli 项

iOS开发网络篇—发送json数据给服务器以及多值参数

iOS开发网络篇—发送json数据给服务器以及多值参数 一.发送JSON数据给服务器 发送JSON数据给服务器的步骤: (1)一定要使用POST请求 (2)设置请求头 (3)设置JSON数据为请求体 代码示例: 1 #import "YYViewController.h" 2 3 @interface YYViewController () 4 5 @end 6 7 @implementation YYViewController 8 9 - (void)viewDidLoad 10