非同步上傳檔案並獲得返回值(完全跨域)

2021-07-31 06:40:47 字數 1882 閱讀 1644

非同步上傳檔案並獲得返回值(完全跨域)ajax可以進行資料的非同步請求,但對於檔案和跨域問題卻束手無策。  

jsonp可以進行跨域資料的非同步請求,但同樣不能使用於檔案。  

"upload"

style=

"display:none"

>

//注意,是name="upload",而不是id="upload"

後台部分  

<?php  

move_uploaded_file($_files['upload_file'

]['tmp_name'

],'upload/'

. $_files[

'upload_file'

]['name'

]); 

//儲存上傳的檔案

echo 'this data is from server!'

; //返回資料,這行字將輸出到iframe的body中

?>  

優化結構一:  

前端部分(當前網域名稱:a.test.com,與form中的action網域名稱不同)  

"upload"

style=

"display:none"

>

//注意,是name="upload",而不是id="upload"

後台部分  

<?php  

move_uploaded_file($_files['upload_file'

]['tmp_name'

],'upload/'

. $_files[

'upload_file'

]['name'

]); 

//儲存上傳的檔案

$html = ''

. 'this data is from server!'

//返回資料,這行字將輸出到iframe的body中

. ''

;  echo $html;  

?>  

通過上面的優化,iframe從伺服器接收到的內容中就多了一條標籤,這個標籤的src是由

"upload"

style=

"display:none"

>

//注意,是name="upload",而不是id="upload"

這次我們沒有看到標籤,因為不再需要了,請繼續看後台**:  

後台部分  

<?php  

move_uploaded_file($_files['upload_file'

]['tmp_name'

],'upload/'

. $_files[

'upload_file'

]['name'

]); 

//儲存上傳的檔案

$data = 'this data is from server!'

//返回資料,這行字將通過url返回給瀏覽器

header('location:'

. $_post[

'tmpurl'

] . 

'?data='

. $_data); 

//上傳完成後使iframe直接跳轉至$_post['tmpurl']

?>  

與優化結構一不同的是,結構二中不再使用「指定document.domain為一級網域名稱」來解除跨域限制,也不通過iframe的document內容來得到返  

回資料,而是通過使iframe直接跳轉至當前網域名稱(通過$_post['tmpurl'

]指定)來徹底取消跨域限制並且通過url的search部分傳遞返回資料。  

兩種結構的對比:  

資料:優化結構一的返回資料無大小限制,而優化結構二的返回資料必須小於2k(因為資料是通過rul傳輸的)。 

非同步上傳檔案並獲得返回值(完全跨域)

ajax可以進行資料的非同步請求,但對於檔案和跨域問題卻束手無策。jsonp可以進行跨域資料的非同步請求,但同樣不能使用於檔案。注意,是name upload 而不是id upload 後台部分 move uploaded file files upload file tmp name upload...

完全跨域 非同步上傳檔案並獲得返回值

ajax可以進行資料的非同步請求,但對於檔案和跨域問題卻束手無策。jsonp可以進行跨域資料的非同步請求,但同樣不能使用於檔案。注意,是name upload 而不是id upload 後台部分 move uploaded file files upload file tmp name upload...

檔案非同步上傳

檔案非同步上傳實際是用form提交和iframe接收製造假非同步效果 步驟 觸發提交按鈕時,1.建立隱藏表單 表單中植入上傳的檔案域 為表單設定絕對定位到頁面看不到的地方 在文件中插入表單 2.建立隱藏iframe 為iframe設定絕對定位到頁面看不到的地方 在文件中插入iframe 為表單設定a...