mvc頁面一個刪除的方法,用ajax請求了控制器的刪除方法,一開始用的
$.post("/admin/del", { id: id }, function (data) { }, "json")
調試走了后台控制器的方法,但沒走到function里面,post改成了get也不行,最后改成了這種寫法
$.ajax({ url:"/admin/del", dataType:"json", data:{id: id}, type:"POST", success:function(req){ //請求成功時處理 }, });
調試走了后台控制器的方法,但還是沒走到function里,去掉【dataType:"json",】后可以了。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
關於dataType:
1、請求成功且返回了數據但不進success:function(){}:https://blog.csdn.net/weixin_34357436/article/details/92380485
JQuery 中ajax的一點其它的認識: 客戶端發起請求,得到服務器端的相應是200(正確拿到服務器響應的數據)沒有問題.此時在判斷進入success 對應的回調函數還是進入到error對應的回調函數之前,可能會校驗一些東西:
a.返回的每條數據是否是dataType中定義的數據類型。如果有部分數據不是或者哪怕一條數據沒有嚴格的按照dataType定義的類型,程序就會進入到error:function(){****};
b.請求的域和當前域是否是同一域,如果不是同一域也十分有可能進入error:function(){***}。
2、沒有設置dataType會解析為字符串:https://blog.csdn.net/u011277123/article/details/53404169
3、datatype含義:https://blog.csdn.net/u013476542/article/details/61414401/
其中,text和xml類型返回的數據不會經過處理。數據僅僅簡單的將XMLHttpRequest的responseText或responseHTML屬性傳遞給success回調函數,
如果指定為html類型,任何內嵌的JavaScript都會在HTML作為一個字符串返回之前執行。類似的,指定script類型的話,也會先執行服務器端生成JavaScript,然后再把腳本作為一個文本數據返回。
如果指定為json類型,則會把獲取到的數據作為一個JavaScript對象來解析,並且把構建好的對象作為結果返回。為了實現這個目的,他首先嘗試使用JSON.parse()。如果瀏覽器不支持,則使用一個函數來構建。JSON數據是一種能很方便通過JavaScript解析的結構化數據。如果獲取的數據文件存放在遠程服務器上(域名不同,也就是跨域獲取數據),則需要使用jsonp類型。使用這種類型的話,會創建一個查詢字符串參數 callback=? ,這個參數會加在請求的URL后面。服務器端應當在JSON數據前加上回調函數名,以便完成一個有效的JSONP請求。如果要指定回調函數的參數名來取代默認的callback,可以通過設置$.ajax()的jsonp參數。
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
關於http的put、delete等方法:https://blog.csdn.net/tankpanda/article/details/49824669
就以前為了面試:get跟post 的區別,都會常說兩點,第一,get請求方式,不安全。post安全。第二,get請求參數內容有限制大小,post請求沒有限制。
這是一種似是而非的答案,其實http協議定義跟這完全沒有關系!第一,get請求不安全,post請求同樣也不安全。原因基於抓包一看,就得到內容。第二,http協議從來就沒有限制過get請求內容的大小,而是瀏覽求對url地址的長度的限制,不同瀏覽器對url請求的參數內容大小會有限制。
這根http協議定義就有點關聯啦,put/delete/get/pos依次可以對應數據庫的增、刪、改、查。所以get請求一般是查數據的,而且內容是無論請求多少,都是一樣不會發生改變的。當然,get也可以帶參數,這里狹義的認為,只要不會影響數據結構的請求方式,都是等冪請求。get請求也是http協議定義中的標准使用。
post、put、delete自然就是不等冪請求,一般會改變數據結構。對應會發生數據結構的改變。這里如果用過Laravel框架,其中的resource路由的定義,就會這個get、post、delete、put請求方式有深刻的理解。
同樣的url地址,同樣的參數形式,會因為請求方式的get、post、put、delete的不同,會分別發生不同的行為。得到不同的結果。
ps:讀了以后還是有點迷,http這些方法有做什么操作嗎,還是上邊說的框架根據http的方法比如delete進行了刪除操作,待以后查證吧
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
關於控制器方法返回類型:https://docs.microsoft.com/zh-cn/aspnet/core/web-api/action-return-types?view=aspnetcore-5.0
ASP.NET Core 提供以下 Web API 控制器操作返回類型選項:
ps:第一個特定類型看描述包括基本數據類型和引用數據類型,感覺都能返回了