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

2021-06-22 12:24:08 字數 1435 閱讀 2258

ajax可以進行資料的非同步請求,但對於檔案和跨域問題卻束手無策。

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

//注意,是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網域名稱不同)

//注意,是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是由

//注意,是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可以進行跨域資料的非同步請求,但同樣不能使用於檔案。upload style display none 注意,是name upload 而不是id upload 後台部分 move up...

檔案非同步上傳

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