AjaxForm dosya yükleme ve uygulama motoru blobstore ile ilgili bazı sorunlar yaşıyorum. Zorluktan şüpheleniyorum çünkü blobstore yükleme işleyicisi (blobstore_handlers.BlobstoreUploadHandler alt sınıfı) herhangi bir içeriği döndürmek yerine bir yönlendirme yanıtı gerektiriyor, ancak emin değilim. Çalışmak için bir XML belgesi almayı umuyorum ve tarayıcıya beklendiği gibi geliyormuş gibi görünüyorum, ancak aşağıdaki ayrıntıları elde edemiyorum.AjaxForm ve uygulama motoru blobstore
class UploadHandler(blobstore_handlers.BlobstoreUploadHandler):
def post(self):
upload_files = self.get_uploads('file') # 'file' is file upload field in the form
blob_info = upload_files[0]
entity_key = self.request.get("entityKey")
// Update a datastore entity with the blobkey (not shown)
// redirect to the uri for the updated entity
self.redirect('%s.xml' % entity_key)
nihai yönlendirme bir xml belgesini döndüren benim uygulamasında bir uri etmektir - aşağıdaki gibi
Uygulamam motor Blobstore yükleme işleyicisi olduğunu. Sunucu çıktısına bakıldığında, herhangi bir şeyin yanlış olduğuna dair bir işaret yoktur - yönlendirme hizmeti verilir ve doğru mime türüyle xml belgesini beklendiği gibi döndürür - bu nedenle form gönderimi iyi görünür ve bu gönderim için sunucu yanıtı görünüyor iyi.
şöyle ajaxForm görünüyor kullanarak Müvekkilim tarafı kodu (üzgünüm onun biraz geniş, ben sorun olsa burada sanmıyorum) -
// Create the form
var dialogForm = $("<form method='POST' enctype='multipart/form-data'>")
.append("<span>Upload File: </span><input type='file' name='file'/><br>")
.append("<input type='hidden' name='entityKey' value='" + entityKey + "'/>")
.append("<input type='hidden' name='entityField' value='image'/>")
.append("<input type='button' value='Wait...' disabled='disabled'/>");;
dialogForm.ajaxForm();
// Turn the form button into a nice jQuery UI button and add a click handler
$("input[type=button]", dialogForm[0]).button()
.click(function() {
log.info("Posting to : " + dialogForm.attr('action'));
dialogForm.ajaxSubmit({
success: function(responseText, statusText, xhr, $form) {
log.info("Response: " + responseText + ", statusText: " + statusText + ", xhr: " + goog.debug.expose(xhr) + ", form:" + goog.debug.expose($form));
}
});
});
ben formdaki 'eylemi' set (ve etkinleştirme sonradan düğmesi) -
$.get('/blob_upload_url', function(data) {
dialogForm.attr("action", data);
$("input[type=button]", dialogForm[0]).attr("value", "Upload").button("option", "disabled", false);
};
orada hem giriş için biraz google kapak yardımıyla ve nesneleri açığa ediyorum. Her şey iyi görünüyor - beklendiği gibi sunucuya doğru bir şekilde gönderiyor ve başarı işlevi deniyor. Chrome dev araçlarında belge yapısını izlersem, dosya yükleme ve yanıtını işlemek için kısaca oluşturulan iFrame'i görebiliyorum. Sorun şu ki, cevapta xml belgesini asla alamıyorum.
[ 18.642s] [Panel] Response: null, statusText: success, xhr: 0 = [object HTMLFormElement]
length = 1
selector =
jquery = 1.4.2, form:0 = [object HTMLFormElement]
length = 1
selector =
jquery = 1.4.2
Resource interpreted as document but transferred with MIME type application/xml [ABCdefGH]
mim türü hakkında krom şikayet muhtemelen süper alakalı, ama bağlantı :) asmıyorum - - aşağıdaki şekilde ölçüm değeridir en azından en xml belgesini getirmesi anlamına geliyor bir nokta. Krom kaynakları görünümünde, POST görebilir ve tepki daha sonra 302 yönlendirme ve sonraki GET isteği olduğunu - başlık iyi görünüyor -
Request URL:http://localhost:8081/_ah/upload/ABCdefGH
Request Method:GET
Status Code:200 OK
Request Headers
Referer:http://localhost:8081/
User-Agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_4; en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome/5.0.375.70 Safari/533.4
Response Headers
Cache-Control:no-cache
Content-Length:2325
Content-Type:application/xml
Date:Sun, 20 Jun 2010 20:47:39 GMT
Expires:Fri, 01 Jan 1990 00:00:00 GMT
Server:Development/1.0
Krom kaynaklar görünümü beni göstermez Bu belgenin içeriği (sadece boş) ancak firefox yok ve xml belgesi iyi görünüyor. Firefox aynı sonucu verir, ancak - ajaxSubmit() responseText için null.
Sadece bir yerlerde bir beyin fade ettiğimi anladım, ama gerçekten beni güldürdü. Herhangi harika olacağını xml belgesini almak için işaretçileri - şerefe,
Colin
Ajaxform'un yönlendirme işlemlerini tek başına ya da kendileriyle ilgilenmeyen bir flash bileşeni kullandığı için doğru şekilde işlemediğini tahmin ediyorum. Yükleme işleyicinizi normal bir istek işleyicisine dönüştürmeyi ve doğrudan bir yönlendirme yerine belgeyi iade etmeyi deneyin ve bunun herhangi bir fark yaratıp yaratmadığını görün - bu en azından yönlendirmenin olup olmadığını size söyleyecektir. –
Evet - önerilen şekilde yönlendirildiğini doğruladı (flaş kullanmıyor). Blogu mağazası UploadHandler bir yönlendirmeyi nasıl yönetiyor? Blobstore ile çalışan herkesin ajax stili yüklemesi var mı? yani kullanıcı yönlendirme veya sayfa yenilemeyi yaşamıyor mu? Teşekkürler. – hawkett
http://forum.jquery.com/topic/jquery-form-plugin-and-app-engine-blobstore#14737000001093602 - yönlendirmeyi takip edemediğini onaylayan yazar. * Zorlanmış * yönlendirme davranışının blobstore API'sı ile aşırı şekilde dolu olduğu görünüyor mu? – hawkett