標籤:提交資料 request else 情況 type pos var svg rip
一, $.ajax,這個是JQuery對ajax封裝的最基礎步,通過使用這個函數可以完成非同步通訊的所有功能。也就是說什麼情況下我們都可以通過此方法進行非同步重新整理的操作。但是它的參數較多,有的時候可能會麻煩一些。看一下常用的參數:
var configObj = {
method //資料的提交方式:get和post
url //資料的提交路勁
async //是否支援非同步重新整理,預設是true
data //需要提交的資料
dataType //伺服器返回資料的類型,例如xml,String,Json等
success //請求成功後的回呼函數
error //請求失敗後的回呼函數
}
$.ajax(configObj);//通過$.ajax函數進行調用。
好,看一個實際的例子吧,看一個進行非同步刪除的例子:
[javascript] view plain copy print?
- <span style="font-size:18px;"> // 刪除
- $.ajax({
- type : "POST", //提交方式
- url : "${pageContext.request.contextPath}/org/doDelete.action",//路徑
- data : {
- "org.id" : "${org.id}"
- },//資料,這裡使用的是Json格式進行傳輸
- success : function(result) {//返回資料根據結果進行相應的處理
- if ( result.success ) {
- $("#tipMsg").text("刪除資料成功");
- tree.deleteItem("${org.id}", true);
- } else {
- $("#tipMsg").text("刪除資料失敗");
- }
- }
- });
- </span>
二,$.post,這個函數其實就是對$.ajax進行了更進一步的封裝,減少了參數,簡化了操作,但是運用的範圍更小了。$.post簡化了資料提交方式,只能採用POST方式提交。只能是非同步訪問伺服器,不能同步訪問,不能進行錯誤處理。在滿足這些情況下,我們可以使用這個函數來方便我們的編程,它的主要幾個參數,像method,async等進行了預設設定,我們不可以改變的。例子不再介紹。
url:發送請求地址。
data:待發送 Key/value 參數。
callback:發送成功時回呼函數。
type:返回內容格式,xml, html, script, json, text,_default。
三,$.get,和$.post一樣,這個函數是對get方法的提交資料進行封裝,只能使用在get提交資料解決非同步重新整理的方式上,使用方式和上邊的也差不多。這裡不再示範。
四, $.getJSON,這個是進一步的封裝,也就是對返回資料類型為Json進行操作。裡邊就三個參數,需要我們設定,非常簡單:url,[data],[callback]。
其實會了$.ajax方法,其它的就都會使用了,都是一樣的,其實非常簡單。
但是這裡還有一個問題,比較麻煩,就是如果頁面資料量比較大,該怎麼辦呢?在常規表單的處理中,我們使用架構Struts2可以通過域驅動模式進行自動擷取封裝,那麼通過ajax,如何進行封裝呢?這裡JQuery有一個外掛程式,Jquery Form,通過引入此js檔案,我們可以模仿表單Form來支援Struts2的域驅動模式,進行自動資料的封裝。用法和$.ajax類似,看一下實際的例子,這裡寫一個儲存使用者的前台代碼:
[javascript] view plain copy print?
- <span style="font-size:18px;"> $(function(){
- var options = {
- beforeSubmit : function() {//處理以前需要做的功能
- $("tipMsg").text("資料正在儲存,請稍候...");
- $("#insertBtn").attr("disabled", true);
- },
- success : function(result) {//返回成功以後需要的回呼函數
- if ( result.success ) {
- $("#tipMsg").text("機構儲存成功");
-
- //這裡是對應的一棵樹,後邊會介紹到,
- // 控制樹形組件,增加新的節點
- var tree = window.parent.treeFrame.tree;
- tree.insertNewChild("${org.id}", result.id, result.name);
- } else {
- $("#tipMsg").text("機構儲存失敗");
- }
- // 啟用儲存按鈕
- $("#insertBtn").attr("disabled", false);
- },
- clearForm : true
- };
-
- $(‘#orgForm‘).ajaxForm(options); //通過Jquery.Form中的ajaxForm方法進行提交
- });
- </span>
多對多:
建立多對多:
方式一:自訂關係表
class Host(models.Model):
nid = models.AutoField(primary_key=True)
hostname = models.CharField(max_length=32,db_index=True)
ip = models.GenericIPAddressField(protocol="ipv4",db_index=True)
port = models.IntegerField()
b = models.ForeignKey(to="Business", to_field=‘id‘)
# 10
class Application(models.Model):
name = models.CharField(max_length=32)
# 2
class HostToApp(models.Model):
hobj = models.ForeignKey(to=‘Host‘,to_field=‘nid‘)
aobj = models.ForeignKey(to=‘Application‘,to_field=‘id‘)
# HostToApp.objects.create(hobj_id=1,aobj_id=2)
方式二:自動建立關係表
class Host(models.Model):
nid = models.AutoField(primary_key=True)
hostname = models.CharField(max_length=32,db_index=True)
ip = models.GenericIPAddressField(protocol="ipv4",db_index=True)
port = models.IntegerField()
b = models.ForeignKey(to="Business", to_field=‘id‘)
# 10
class Application(models.Model):
name = models.CharField(max_length=32)
r = models.ManyToManyField("Host")
無法直接對第三張表進行操作
obj = Application.objects.get(id=1)
obj.name
# 第三張表操作
obj.r.add(1)
obj.r.add(2)
obj.r.add(2,3,4)
obj.r.add(*[1,2,3,4])
obj.r.remove(1)
obj.r.remove(2,4)
obj.r.remove(*[1,2,3])
obj.r.clear()
obj.r.set([3,5,7])
# 所有相關的主機對象“列表” QuerySet
obj.r.all()
python之路二十