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...
ajax非同步跨域上傳檔案,並顯示上傳進度
一般ajax跨域請求 解決方法1 getresponse setheader access control allow origin 允許跨域訪問 解決方法2 ajax response.getwriter write callback callback為ajax自動傳來的 如 jquery1800...