非同步上傳檔案並獲得返回值(完全跨域)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...