我正在嘗試通過在文件上傳之前延遲其生成而不是在呈現表單時解析過期的上傳URL。我發現了一個解決方法是做到這一點的形式提交或按鈕點擊事件,像這樣:在表單提交之前生成上傳url
$('#btn-upload').click(function(event){
event.preventDefault();
var uploadUrl = '';
$.get("/generate_upload_url", function(data) {
uploadUrl = data;
});
$('#my-form').attr('action', uploadUrl);
});
而在服務器端我有一個生成像這樣上傳的URL處理程序:
class GenerateUploadUrlHandler(BaseHandler):
def get(self):
upload_url = blobstore.create_upload_url('/upload')
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write(upload_url)
我會期望當我點擊按鈕生成新的上傳url並在那裏發佈POST請求時,但是會發生什麼情況是表單的操作被延遲填充並且POST請求被完成爲錯誤的URL。我懷疑這可能是因爲我在做異步GET請求,我的形式在同一時間提交,但我不能完全肯定,因爲我在這裏看到類似的例子: http://blog.notdot.net/2010/04/Implementing-a-dropbox-service-with-the-Blobstore-API-part-3-Multiple-upload-support
我看你使用'event.preventDefault()的提交事件;'應防止您的形式從在點擊提交按鈕時提交。你確定點擊事件被調用嗎? – Dola
是的,'preventDefault()'是需要的,因爲我通過其他地方的文件上傳界面提交表單。 –