jQuery AJAX çağrı Webkit'te çalışmıyor

2 Cevap php

Ben Webkit tabanlı tarayıcılar (Safari ve Chrome hem de - Ben bir Mac üzerinde test ediyorum) ile garip bir sorun haline çalıştırmak ve bunu neden ne emin değilim. Burada sorunu çoğaltır ben yarattık küçük bir senaryo:

<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 olduğunu:

<?php
echo $_REQUEST['tmp'];
?>

Firefox, ama XMLHTTPRequest durum Safari ve Chrome hem de her zaman "0" olduğu gibi çalışır. Ben bu satırı kaldırırsanız:

document.test.submit();

o zaman çalışır, ama tabii formu teslim edilmez. Ben formu "göndermek" için "düğmesi" den Gönder düğmesini değiştirerek denedim, ama o da Safari veya Chrome üzerinde çalışan önler.

Ben başarmak için çalışıyorum olduğunu:

  • formu göndermek
  • (küçük bir yükleme ilerleme metre içindir) formuyla karşıya yüklenen dosya üzerinde statüsü almak için başka bir komut dosyası çağırın.

Herhangi bir Yardım gerçekten takdir - Bunu ben aşina değilim sadece bir cilvesi umutluyum.

Teşekkürler!

  • Brian

2 Cevap

Basitçe söylemek gerekirse: Eğer cannot AJAX kullanarak dosya upload.

Böyle jquery form (gizli bir iframe oluşturma ve gerçek dosya yükleme yaparak) otomatik olarak bu idare edecek kadar güzel eklentiler vardır.

Ben FireFox bir native file upload API olduğunu düşünüyorum ama bir çapraz tarayıcı çözüm istiyorsanız bazı eklentileri bakmak gerekir. A flash upload kullanarak bir çözümdür.

Benim deneyim denetimi aracını benzer bir yükleme geliştirirken 1 hem success: .. ve complete: .. kullanmak gerektiğidir. Bunlar muhtemelen kodunuzda aynı şeyi yapacağını ve onları aynı işlevi çağrı olabilir. Istek tamamlandığında complete: çağrılır, success: bir istek başarılı olduğunda. Böylece belki:

function doRequest() {
  document.test.submit();
  $.ajax({
    type: "GET",
    cache: false,
    url: 'ajax.php?tmp=1',
    complete: doSuccess,
    success: doSuccess
  });
}