相关疑难解决方法(0)

AngularJS - $ http.post发送请求参数而不是JSON的任何方式?

我有一些旧的代码通过jQuery的post方法发出一个AJAX POST请求,看起来像这样:

$.post("/foo/bar", requestData,
    function(responseData)
    {
        //do stuff with response
    }
Run Code Online (Sandbox Code Playgroud)

requestData 只是一个具有一些基本字符串属性的javascript对象.

我正在将我们的东西移动到使用Angular,我想用$ http.post替换这个调用.我想出了以下内容:

$http.post("/foo/bar", requestData).success(
    function(responseData) {
        //do stuff with response
    }
});
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我收到了来自服务器的500错误响应.使用Firebug,我发现这样就发送了请求体:

{"param1":"value1","param2":"value2","param3":"value3"}
Run Code Online (Sandbox Code Playgroud)

成功的jQuery $.post发送身体像这样:

param1=value1&param2=value2&param3=value3
Run Code Online (Sandbox Code Playgroud)

我遇到的端点是期望请求参数而不是JSON.所以,我的问题是,无论如何要告诉$http.post发送javascript对象作为请求参数而不是JSON?是的,我知道我可以自己从对象构造字符串,但我想知道Angular是否提供了开箱即用的东西.

javascript jquery post angularjs

116
推荐指数
7
解决办法
21万
查看次数

Django的Querydict奇怪的行为:将POST字典串成一个单独的键

在django中使用测试客户端时,我遇到了一种非常奇怪的行为.

我正在使用a POST将数据发送到我的django应用程序.我通常是从iPhone应用程序和/或测试html表单执行此操作.在服务器端,这是我处理它的方式:

def handle_query(request):
   print request
   q = con.QueryLog()
   q.ID = request.POST.get('ID', '')
   q.device = request.POST.get('device-model', '')
   ....
Run Code Online (Sandbox Code Playgroud)

那个print语句看起来像你期望的那样,即post请求中的每个参数都变成了字典中的一个键:

POST:QueryDict:{u'app-version':[u'3.0'],u'server-version':[u'v3d0'],

但是,我开始使用Django的测试客户端编写一些测试,无论我尝试什么,我在post请求中发送的POST参数字典都会聚集在一起QueryDict.请允许我用一些代码来说明:

class SearchTest(TestCase):def setUp(self):pass

def test_search(self):
    request = HttpRequest()
    data = '{"amzn_locale": "com"}'
    # request._raw_post_data = data
    resp = self.client.post(
        '/is/', 
        data=data,
        content_type='application/x-www-form-urlencoded',
        # content_type='application/json',
        )
Run Code Online (Sandbox Code Playgroud)

服务器端的相同print语句显示字典无法解释为字符串:

POST: QueryDict: {u'{"amzn_locale":"com"}': [u'']}>,
Run Code Online (Sandbox Code Playgroud)

如果我将数据设置为实际字典,同样的事情

data = {"amzn_locale": "com"}
Run Code Online (Sandbox Code Playgroud)

设置request._raw_post_data不会改变任何内容.改变也没有

content_type='application/json'
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激.从这个stackoverflow问题看起来我似乎不是第一个遇到这个 iphone的Json POST请求到Django服务器在QueryDict中创建QueryDict

python django rest post

5
推荐指数
1
解决办法
3937
查看次数

将数据从angularjs发送到django

我正在使用Angularjs及其$ http模块向Django服务器发送POST AJAX请求.这是一个例子:

$http({ 
        method: 'POST', 
        url: '/url/', 
        data: 'test data'
  }).
  success(function(data, status, headers, config) {
        doSomeStuffWhenSuccess();
  });
Run Code Online (Sandbox Code Playgroud)

问题是我在Django中得到的.无论我发送什么数据始终是QueryDict对象的关键,因此值始终是空列表.

<QueryDict: {u'test data': [u'']}>
Run Code Online (Sandbox Code Playgroud)

我不知道为什么.我错过了什么?

我使用几乎默认创建的Django应用程序只使用默认中间件.我只创建了一个视图并在url config中设置了一个url.Django的版本是1.3.我配置angular的$ http模块总是发送一个包含csrf令牌的头来满足Django.

django ajax http angularjs

5
推荐指数
2
解决办法
4684
查看次数

标签 统计

angularjs ×2

django ×2

post ×2

ajax ×1

http ×1

javascript ×1

jquery ×1

python ×1

rest ×1