php进行前后端分离开发过程中,当前端使用ajax请求服务器时,如果我们发送的参数为json格式的话,往往会发送两次请求第一次为OPTIONS预请求,第二次则为我们自己定义的请求方式GET、POST或者其它。
本文主要讲的是tp5.1内RESTful风格请求的时候为防止预请求OPTIONS报错的route.php内的路由设置
1.请求格式为json
1)前端发送
$.ajax({
url:"http://www.lh.com/bbb",
type:"get",
dataType:"JSON",
data:{id:1,abc:12},
contentType: 'application/json',
success: function(data){
alert('asdas'+data);
},
error : function(jqXHR) {
alert('asdsaasdas'+jqXHR.status);
}
})
2)后端接收时route.php定义
Route::rule('bbb','index/Ceshi/bbb','GET|OPTIONS'); //请求方式为POST的话,将GET改为POST
这主要是因为发送json格式数据的时候,浏览器会将数据定义为不是简单的请求参数。
2.请求格式为jsonp
如果将请求参数的json格式设置为jsonp格式的话,则不会发送OPTIONS预请求。但是使用jsonp格式进行请求的时候,无论ajax内设置的请求方法是什么,在服务器接收的过程中都会将这些请求方法默认为GET请求。
1)前端发送
$.ajax({
url:"http://www.lh.com/bbb",
type:"get", // 无论这里是什么请求方式
dataType:"jsonp",
data:{id:1,abc:12},
contentType: 'application/json',
success: function(data){
alert('asdas'+data);
},
error : function(jqXHR) {
alert('asdsaasdas'+jqXHR.status);
}
})
2)后端接收时route.php定义
Route::rule('bbb','index/Ceshi/bbb','GET'); // 无论前端的请求方式是post还是get,都要设置成get