2013-10-22 27 views
1

使用Django制作后到我的API的时候,我发现了以下错误:资源已没有可用的反序列化方法

格式表示为“text/plain的”没有可用的反序列化方法。请在您的串行检查formatscontent_types。”

我曾尝试加入enctype="application/x-www-form-urlencoded的形式,但错误是一样的。我想,也许这是一个API序列化问题?

任何想法的?

这是AJAX:

$.ajax({ 
        url: '/api/v1/rewards/campaigns/', 
        type: 'POST', 
       dataType: "json", 
        beforeSend: function (request) { 

         request.setRequestHeader("X-CSRFToken", $('input[name="csrfmiddlewaretoken"]').val()); 
        }, 
        data: $('#registration').serialize(), 
        success: function(data, textStatus) { 
         console.log('success'); 

        }, 
        error: function(errorThrown){ 
        // data = JSON.parse(errorThrown.responseText); 
         console.log(errorThrown); 
        } 
       }); 

这是它被发布到资源:

class urlencodeSerializer(Serializer): 
    formats = ['json', 'jsonp', 'xml', 'yaml', 'html', 'plist', 'urlencode'] 
    content_types = { 
     'json': 'application/json', 
     'jsonp': 'text/javascript', 
     'xml': 'application/xml', 
     'yaml': 'text/yaml', 
     'html': 'text/html', 
     'plist': 'application/x-plist', 
     'urlencode': 'application/x-www-form-urlencoded', 
     } 

    def from_urlencode(self, data, options=None): 
     """ handles basic formencoded url posts """ 
     qs = dict((k, v if len(v) > 1 else v[0]) 
        for k, v in urlparse.parse_qs(data).iteritems()) 
     return qs 

    def to_urlencode(self, content): 
     pass 

class CampaignCreateResource(ModelResource): 

    class Meta: 
     queryset = Campaign.objects.all() 
     resource_name = 'rewards/campaigns' 
     allowed_methods = ['post', 'get'] 
     serializer = urlencodeSerializer() 
     validation = FormValidation(form_class=CampaignForm) 

回答

2

添加contentType: 'application/json; charset=UTF-8'到您的通话$.ajax()指示请求数据的内容类型。

dataType参数指定响应的格式,而不是要求

相关问题