当使用AJAX调用删除对象时,为什么还要回复200和204的2个响应?

时间:2016-03-05 00:51:47

标签: javascript jquery ajax

我在下面创建了一些示例代码。您只需单击要删除的文本(或li元素)即可删除项目。

当您在删除时查看网络选项卡时,会同时返回204和200响应。为什么有两个?我只打了一个电话。

heck是请求方法“OPTIONS”来自哪里?

//Cache DOM
var $content 	= $( 'ul' );
var $name		= $( '#name' );
var $bike		= $( '#bike' );
var $addButton	= $( '#add-item' );
var $liElems 	= $( 'li' );

//Functions


$( function () {

	function addItem( data ) {
		$content.append( '<li id="' + data.id + '">' + data.name + ' likes ' + data.bike + '</li>' );
	}

	$.ajax( {
		type: 'GET',
		url: 'http://rest.learncode.academy/api/sjm/bikes',
		success: function( response ) {
			$.each( response, function( index, bikes ) {
				addItem( bikes );
			});
		},
		error: function( ) {
			console.log ( 'error loading orders' );
		}
	});

	$addButton.on( 'click', function(){
		var data = {
			name: $name.val(),
			bike: $bike.val()
		};

		$.ajax( {
			type: 'POST',
			url: 'http://rest.learncode.academy/api/sjm/bikes',
			data: data,
			success: function( response ) {
				addItem( response );
			},
			error: function( ) {
				console.log( 'error while saving' );
			}
		});
	});

	$content.delegate( 'li', 'click', function ( ) {
		var id = $( this ).attr( 'id' );
		var $this = $( this );

		console.log ( 'delete ' + id);
		$.ajax({
			type: 'DELETE',
			url: 'http://rest.learncode.academy/api/sjm/bikes/' + id,
			success: function( response ){
				$this.fadeOut( 300, function ( ) {
					remove( );
				});
			},
			error: function( ){
				console.log( 'error deleting data' );
			}
		});
	});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="content">
	<section>
		name <input type="text" id="name">
		bike <input type="text" id="bike">
		<button id="add-item">add data</button>
	</section>
	<ul></ul>
</div>

1 个答案:

答案 0 :(得分:5)

当您尝试将XMLHttpRequest发送到与托管页面不同的域时,您违反了同源策略。然而,这种情况变得有些普遍,引入了许多技术。 CORS就是其中之一。

简而言之,您发送DELETE请求的服务器允许跨域请求。在此过程中,应该进行预检调用,即 HTTP OPTION 调用。

因此,您对 OPTION DELETE 电话有两个回复。

请参阅MDN page for CORS