2009-12-28 22 views
144

Bir kayıt formum var ve bunu göndermek için $.ajax kullanıyorum.Ajax başarı olayı çalışmıyor

Bu benim AJAX isteği: I alanları e-posta adresi ve veritabanında adı bulunmadığını kontrol benim submit1.php dosyasında

$(document).ready(function() { 
    $("form#regist").submit(function() { 
     var str = $("#regist").serialize(); 
     $.ajax({ 
      type: 'POST', 
      url: 'submit1.php', 
      data: $("#regist").serialize(), 
      dataType: 'json', 
      success: function() { 
       $("#loading").append("<h2>you are here</h2>"); 
      }   
     }); 
     return false;   
    }); 
}); 

. sayfa yenilemesine gerek kalmadan bu değer varsa bir hata iletisi görüntülemek istiyorum.

Bunu AJAX isteğimin geri çağrısı için başarısı geri çağrısına nasıl ekleyebilirim? application/json

+2

Başarı geri bildiriminin başlatıldığından emin misiniz? – rahul

+0

İkinci probleminiz için yeni bir soru sormanız gerekiyor. –

cevap

303

Sonuç muhtemelen JSON biçiminde değil, jQuery bu şekilde ayrıştırmaya çalıştığında başarısız oluyor. Hatayı error: geri arama işleviyle yakalayabilirsiniz.

Bu işlevde JSON'a ihtiyacınız yok gibi görünüyor, bu nedenle dataType: 'json' satırını da çıkarabilirsiniz.

+4

+1, –

+0

numaralı hatanın olası bir sebebi gibi görünüyor .. !! Teşekkürler tatu Ulmanen ... datatype kaldırarak: 'json' dışarı iş yaptı ve şimdi istenilen sonucu almak ... Ben gerçekten benim cevabım için cevabını takdir ediyorum .. Teşekkürler ... Teşekkürler – noobcode

+3

@idrish, o nazik olurdu Doğru cevabı kabul edildi olarak işaretleyin, böylece başkaları yanlışlıkla cevaplamayacaktır. –

-5

iki argüman alır herşey.

Değilse, bu, sunucuyu vurmayı başarmanıza rağmen isteğin hiç de başarılı olmamasıydı. Makul nedenler bir zaman aşımının sona ermesi olabilir veya php kodunuzdaki bir şey bir istisna atar.

Firefox eklentisini firefox için yükleyin, henüz yapmadıysanız ve AJAX geri çağrısını kontrol edin. Yanıtı görebilecek ve başarılı bir (200 OK) yanıt alıp almayacağını görebileceksiniz. Ayrıca kesinlikle çağrılması gereken alert() numaranızı complete geri arama kutusuna da koyabilirsiniz.

+0

Cevabınız için teşekkür ederiz. Bunu jquery ajax belgeselinde okudum ama çalışmamı sağlamak için bir sonraki adımın ne olduğunu anlayamıyorum ... eğer doğru yöne işaret ederseniz sevinirim. Ayrıca php dosyamda belirli bir kod olması gerektiği anlamına mı geliyor? – noobcode

+7

'a çok teşekkürler “başarı” nın iki argümanı alması tamamen soruyla alakasız görünmektedir. Beyanında kaç tane kabul ettiğine bakılmaksızın herhangi bir parametreyi bir javascript işlevine iletebilirsiniz, dolayısıyla bu sorunların nedeni kesinlikle bu değildir ve "data" veya "textStatus" değerlerinin hiçbiri kullanılmadığından Başarının geri dönüşü, onları işlevde beyan etmek için iyi bir neden yok gibi görünüyor. –

+0

Ve JSON verilerinde doğru içerik türü başlığı olması gerekmez, sadece JSON biçiminde olması gerekir. –

4

emin çağrılan varlık olmak için success geri aramasında bir alert() koyun:

Ayrıca
success: function (data, textStatus) { } 

submit1.php uygun içerik türü başlığı koyar emin olun: success callback

+0

Cevabınız için teşekkür ederiz. Başarı olayında denenmiş alarm ancak işe yaramadı. Firefox için firebug addon'um var ve bu sayede başarılı (200 OK) yanıt aldım bu yüzden sorun yok .. Herhangi bir hata için php dosyamda adı verilen bir kalıplama fonksiyonum var ve firebug'da kontrol ettiğimde, uygun yanıtı gösterir. Ne demek "Kesinlikle geri çağrılması gereken tam geri aramada başka bir uyarı() koyabilirsiniz." Hızlı bir yanıt için çok teşekkür ederim – noobcode

+2

Eğer 'başarı'da uyarı görmüyorsanız, o zaman bu bir başarı değil. yanıt 200 olduğunda, Tatu'nun cevabı makul görünüyor, ancak daha fazla sorun giderme için, bir isteğin başarılı olup olmadığına bakılmaksızın her zaman çağrılan "tamamlandı" adlı başka bir etkinlik kullanabilirsiniz ("başarı" yalnızca istekte bulunur) başarılıdır). 'complete: function (xhr, status) {alert ('complete:' + status); } –

13

Sorun zaten çözülmüş olsa da, bunu başkalarına yardım edeceğime umut ediyorum.

Hata, böyle bir işlevi doğrudan kullanmaya çalıştım (başarı: OnSuccess (productID)). Ama önce bir anonim işlev geçmek zorunda: Bir sarıcı onSuccess webcoder bir istisna dönse bile denir olarak

function callWebService(cartObject) { 

    $.ajax({ 
     type: "POST", 
     url: "http://localhost/AspNetWebService.asmx/YourMethodName", 
     data: cartObject, 
     contentType: "application/x-www-form-urlencoded", 
     dataType: "html", 
     success: function() { 
     OnSuccess(cartObject.productID) 
     }, 
     error: function() { 
     OnError(cartObject.productID) 
     }, 
     complete: function() { 
     // Handle the complete event 
     alert("ajax completed " + cartObject.productID); 
     } 
    }); // end Ajax   
    return false; 
    } 

anonim işlevini kullanın yoksa.

+0

Teşekkürler @js newbee. – noobcode

+4

bunun ajax, jquery veya işleyicileri ile ilgisi yoktur. Aynı zamanda "bütün kodun bir komut dosyası etiketine sarılacağını" hatırlatan bir yorum yapabiliriz. Açıklama yanlıştır: anonim işlevlerde herhangi bir şey sarmak zorunda değilsiniz, adlandırılmış bir işlev, onu çağırmak yerine ilettiğiniz sürece yapacaktır. Ayrıca yanıltıcıdır: OnSuccess istek gönderilmeden önce çağrılır, bu yüzden bir şey döndüren web servisiyle ilişkilendirmek hiçbir anlam ifade etmez. – fdreger

+0

Bu cevap bana yardımcı oldu, ancak ben cevap vermedim, cevabınızı @fdreger yorumuna göre güncellemelisiniz. –

13

DataType satırını kaldırmayı denedim ve bu benim için çalışmadı. Sorunun geri dönüşü olarak "başarı" yerine "tamamlandı" ifadesini kullanarak sorunu çözdüm. Başarı geri çağırma, IE'de hala başarısız oluyor, ancak benim betiğim çalıştığı ve tamamladığım her şeyden önemlisi, umurumda değil.

$.ajax({ 
    type: 'POST', 
    url: 'somescript.php', 
    data: someData, 
    complete: function(jqXHR) { 
     if(jqXHR.readyState === 4) { 
      ... run some code ... 
     } 
    }   
}); 

jQuery 1,5 böyle bunu da yapabilirsiniz.

var ajax = $.ajax({ 
    type: 'POST', 
    url: 'somescript.php', 
    data: 'someData' 
}); 
ajax.complete(function(jqXHR){ 
    if(jqXHR.readyState === 4) { 
     ... run some code ... 
    } 
}); 
+7

Bunun için sadece bir not. "Tamam", ajax çağrısı başarılı olursa olsun her zaman aranacak ve "web sunucusu" 200 OK "HTTP üstbilgisiyle (her şey yolunda giderse)" başarı "sadece çağrılırken. –

10

(eko veya baskı) Yazdırmakta emin ol herhangi bir metin/veri JSON PHP dosyadaki verilerin formated oluşturmak için önce. Bu, tam olarak 200 ok almanız gerektiğini açıklayabilir, ancak javascript'inizde başarı durumunuz hala başarısız olur. POST submit1.php için firebug'daki "Network - Answer" bölümünü kontrol ederek betiğinizin ne olduğunu doğrulayabilirsiniz.

+2

Teşekkür ederiz, teşekkür ederim. –

+0

Bu gerçekten bana yardımcı oldu. Biliyorum ki bu eski bir cevap ama tam olarak sahip olduğum problemdi. Hata ayıklama sırasında yankılarını veya print_r'leri kullanmak ve bunların aslında hataya neden olduğunu öğrenmek ... :) Teşekkürler! –

+0

6 yıl sonra hala bu yanıtla insanlara yardım ediyor! Başka türlü nereye bakacağımı bilmezdim. –

1

benim "tam" geri aramasında 200 yanıt alıp, geçerli JSON dönüyordu ve krom ağ konsolunda o görebiliyordu ... AMA benim yaptığım zamanlar ben

dataType: "json" 

belirtilen olmasaydı "kabul edilen cevap" dan farklı olarak, sorunu gerçekten çözdü.

0

Sonuçları, sunucudaki web sayfasından php'ye geri götürmek için XML kullanıyorum ve aynı davranışı aldım. Benim durumumda, kapanış etiketinin açılış etiketi ile eşleşmemesi nedeni idi.

<?php 
.... 
header("Content-Type: text/xml"); 
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?> 
    <result> 
     <status>$status</status> 
     <OPENING_TAG>$message</CLOSING_TAG> 
    </result>"; 
?> 
+0

Kodunuz çok çirkin, neden php etiketlerini burada kullanıyorsunuz? – pylover

1

Magento kullanıcı parolasını kurtarmak için ajax işlevini kullanarak bu sorunu yaşadım. başarı olay ateş olmamak, sonra iki hataları vardı fark: Sonuç JSON biçiminde iade edilen değildi

  1. JSON biçimine bir dizi dönüştürmek için çalışıyordu, ama bu dizi olmayan vardı onun endekslerinin en olmayan utf karakterler vardı çünkü -utf karakterler

Yani dönen diziyi kodlamak için() json_eoncde kullanmaya çalıştı her zaman, işlev Brezilya Portekizce deyişle çoğu artması, çalışma değildi.

3

Aynı problem yaşadım. Bu, javascript'un dönen verilerde json veri türünden beklemesi nedeniyle gerçekleşir. ama eğer eko kullanırsanız veya php'inizde yazdırırsanız bu durum oluşur. Verileri döndürmek için php'da echo işlevini kullanırsanız, dataType : "json"'u oldukça iyi bir şekilde temizleyin.

1

ben denetleyicisinden dize dönmeye çalıştı ama neden kontrol hatası bu sunucu tarafında olduğunu ve bu nedenle bir dönüyordu değildi benim durumumda ajax

var sownum="aa"; 
$.ajax({ 
    type : "POST", 
    contentType : 'application/json; charset=utf-8', 
    dataType : "JSON", 
    url : 'updateSowDetails.html?sownum=' + sownum, 
    success : function() { 
     alert("Wrong username"); 
    }, 
    error : function(request, status, error) { 

     var val = request.responseText; 
     alert("error"+val); 
    } 
}); 
0

başarısında bloğu hata dönen html

wp_nonce_field(basename(__FILE__), "mu-meta-box-nonce"); 
İlgili konular