1. 程式人生 > >tp5.1 php 前後端分離開發 Restful風格 預請求OPTIONS問題 處理

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