我正在尝试使用angular.js中的资源进行调用,并添加成功和错误回调。
wbsModule.factory('gridData', function($resource) {
//define resource class
var root = {{ root.pk }};
var csrf = '{{ csrf_token }}';
return $resource('{% url getJSON4SlickGrid root.pk %}:wpID', {wpID:'@id'},{
get: {method:'GET', params:{root : root }, isArray:true},
update:{method:'POST', headers: {'X-CSRFToken' : csrf }},
});
});
我正在调用这样的更新操作:
args.item.$update([], successUpdateCallback, errorUpdateCallback);
我在这里跟踪了part个文档:
non-GET instance actions: instance.$action([parameters], [success], [error])
如果发生错误,服务器会像这样返回json:
jsonReturn = [{'error' : "Oops.. a problem occured. We could not save your last change in the highlighted row: "}]
jsonReturn.append({'wp_id' : wp_id})
try:
for key, value in wpForm.errors.iteritems():
jsonReturn.append({"form_errors" : "<br/>" + str(value)})
except Exception, e:
print e
return HttpResponse(json.dumps(jsonReturn, indent=4), mimetype="application/json", status=400)
对于错误回调,我可以访问如下错误消息:
function errorUpdateCallback(result){
console.log(result.data);
error = result.data[0].error;
wp_id = result.data[1].wp_id;
form_errors = result.data[2].form_errors;
}
};
但是当我尝试为成功函数做同样的事情时,我收到了这个错误,这个错误在进入successUpdateCallback之前抛出:
'undefined' is not a function (evaluation 'a.push(U(b[c]))')
http://ajax.googleapis.com/ajax/libs/angularjs/1.0.2/angular.min.js
我在服务器的错误情况下创建json的位置:
jsonReturn = [{'message' : "Successfull update."}]
return HttpResponse(json.dumps(jsonReturn, indent=4), mimetype="application/json", status=200)
并解析成功回调与错误回调相同:
function successUpdateCallback(result){
console.log("in suc. update");
console.log(result);
message = result.data[0].message;
};
当我返回一个空的json对象时,我没有收到此错误,并且输入了successUpdateCallback,将“在suc.update中”打印到控制台:
jsonReturn = []
return HttpResponse(json.dumps(jsonReturn, indent=4), mimetype="application/json", status=200)
答案 0 :(得分:2)
供将来参考:
Angular期望一个成功的帖子调用,服务器使用我们称为$ update或$ save的资源的json表示来响应。
我发现它here。隐藏在评论中:))
card.$save();
// POST: /user/123/card/456 {id:456, number:'1234', name:'J. Smith'}
// server returns: {id:456, number:'1234', name: 'J. Smith'};
因此,我从服务器返回资源的json表示,它按预期工作。