我刚刚注意到,当我制作Angular(1.4.8)
AJAX POST请求时,它在chrome网络选项卡中可见两次(第一次(355B)为angular.js:10765,第二次(812B)为其他第一次看起来像请求,第二次为响应 – 只有第二个包含响应数据).
我使用jQuery做出了相同的请求,它出现在一个单一的请求中(812B).
我使用jQuery做出了相同的请求,它出现在一个单一的请求中(812B).
码:
return function ( id ) { var deferred = $q.defer(),data = { id: id || null,range: tbDateRange.get( true ) } ; /* TODO - REMOVE */ $.ajax({ method: 'POST',url: path,dataType: 'JSON',data: data }); $http.post( path,data ) .success( function ( data ) { /*...*/ deferred.resolve( data ); } ) .error( function ( error ) { /*...*/ } ); return deferred.promise; };
和网络标签截图:
解决方法
Angular默认为POST JSON格式的数据而不是表单编码数据(jQuery不是这样,因为我使用jQuery做出相同请求的语句是不正确的).
跨域,JSON格式,POST请求需要preflight OPTIONS request.
据推测(因为除了他们要去的URL的末尾之外你没有显示请求的任何细节),这些请求中的第一个是预检OPTIONS请求.