我遇到了一個基於Webkit的瀏覽器(包括Safari和Chrome - 我正在Mac上測試)的奇怪問題,我不確定是什麼導致它。下面是我創建了一個小腳本複製問題:jQuery AJAX調用不在Webkit中工作
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" language="javascript">
function doRequest() {
document.test.submit();
$.ajax({
type: "GET",
cache: false,
url: 'ajax.php?tmp=1',
success: doSuccess
});
}
function doSuccess(t_data,t_status,req) {
alert('Data is: '+ t_data +', XMLHTTPRequest status is: '+ req.status);
}
</script>
</head>
<body>
<form name="test" method="post" action="ajax.html" enctype="multipart/form-data">
<input type="file" name="file_1">
<br><input type="button" value="upload" onclick="doRequest();">
</form>
</body>
</html>
ajax.php是:
<?php
echo $_REQUEST['tmp'];
?>
這個工作過程是在Firefox,但XMLHttpRequest對象的狀態始終是「0」都Safari和Chrome。如果我刪除此行:
document.test.submit();
然後它的工作,但當然表單沒有提交。我嘗試將表單提交按鈕從「按鈕」更改爲「提交」,但這也阻止了它在Safari或Chrome上的工作。
我試圖做到的是:
- 提交表單
- 調用另一個腳本,以獲取有關文件的狀態通過形式(它是一個小上傳進度表)被上傳。
任何幫助真的很感謝 - 我希望這只是一個我不熟悉的怪癖。
謝謝!
- 布賴恩
我沒有通過AJAX上傳文件 - 文件上傳正在HTML表單中處理 - AJAX調用是一個單獨的PHP腳本調用,它將監視上傳。我已經簡化了上面的例子來說明這個問題 - 在'真實世界'中這個表單提交給perl CGI腳本,並且AJAX調用發送給PHP腳本,而PHP腳本隨着監視perl腳本處理文件上傳。 謝謝! - Brian – Brian 2010-05-04 17:29:31
提交表單後,瀏覽器將重定向到ajax.html,並且腳本可能會停止執行,因此在提交表單後嘗試執行ajax調用將毫無用處。 – 2010-05-04 17:32:48
文件上傳後會發生重定向 - 這是正確的,但是當表單被提交(並且因此文件被上傳)時,它不會被重定向。例如,上傳一個100MB文件可能需要幾分鐘時間 - 那時候我想通過AJAX查詢一個PHP腳本並獲取進度。這適用於Firefox和IE,所以我想知道爲什麼AJAX調用僅在基於Webkit的瀏覽器中失敗。據我所知,document.form.submit沒有被阻塞,因爲如果你上傳一個足夠大的文件需要10秒左右的時間來提交,你會看到AJAX調用是立即的。 – Brian 2010-05-04 17:40:19