tp5.1 php 前后端分离开发 Restful风格 预请求OPTIONS问题 处理

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

 

 

 

 

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页