Saya memiliki formulir pendaftaran dan saya gunakan $.ajax
untuk mengirimkannya.
Ini adalah permintaan AJAX saya:
$(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;
});
});
Dalam file subm1.php saya, saya memeriksa keberadaan bidang alamat email dan nama pengguna dalam database. Saya ingin menampilkan pesan kesalahan jika nilai itu ada tanpa penyegaran halaman .
Bagaimana saya bisa menambahkan ini ke callback sukses permintaan AJAX saya?
javascript
jquery
ajax
codingbbq
sumber
sumber
Jawaban:
Hasilnya mungkin tidak dalam format JSON, jadi ketika jQuery mencoba menguraikannya, gagal. Anda dapat menangkap kesalahan dengan
error:
fungsi panggilan balik.Anda sepertinya tidak membutuhkan JSON dalam fungsi itu, jadi Anda juga dapat menghapus
dataType: 'json'
baris tersebut.sumber
dataType:'text'
dataType:
tidak ditentukan, tetapiurl:
berakhir pada.json
.$.post
alias memasokjson
sebagai tipe data tanpa json yang sebenarnya berasal dari server tidak memicusuccess
panggilan balikMeskipun masalah sudah diselesaikan saya menambahkan ini dengan harapan ini akan membantu orang lain.
Saya membuat kesalahan dan mencoba menggunakan fungsi secara langsung seperti ini (sukses: OnSuccess (productID)). Tetapi Anda harus melewati fungsi anonim terlebih dahulu:
Jika Anda tidak menggunakan fungsi anonim sebagai pembungkus OnSuccess disebut bahkan jika layanan web mengembalikan pengecualian.
sumber
Saya mencoba menghapus baris dataType dan itu tidak berhasil untuk saya. Saya mengatasi masalah ini dengan menggunakan "lengkap" alih-alih "sukses" sebagai panggilan balik. Callback sukses masih gagal di IE, tetapi karena skrip saya berjalan dan menyelesaikan pula itu yang saya pedulikan.
di jQuery 1.5 Anda juga bisa melakukannya seperti ini.
sumber
complete
akan selalu dipanggil terlepas apakah panggilan ajax berhasil atau tidak sementarasuccess
hanya dipanggil jika server web merespons dengan200 OK
tajuk HTTP (semuanya OK).Pastikan Anda tidak mencetak (gema atau mencetak) teks / data apa pun sebelum menghasilkan data formasi JSON Anda dalam file PHP Anda. Itu bisa menjelaskan bahwa Anda mendapatkan -sucessfull 200 OK- tetapi acara sukses Anda masih gagal di javascript Anda. Anda dapat memverifikasi apa yang diterima skrip Anda dengan memeriksa bagian "Jaringan - Jawab" di pembakar untuk POST submit1.php.
sumber
Masukkan callback
alert()
Andasuccess
untuk memastikan itu dipanggil sama sekali.Jika tidak, itu hanya karena permintaan tidak berhasil sama sekali, meskipun Anda berhasil menekan server. Penyebab yang masuk akal bisa jadi batas waktu habis, atau sesuatu dalam kode php Anda membuat pengecualian.
Instal addebeb firebug untuk firefox, jika Anda belum melakukannya, dan periksa callback AJAX. Anda akan dapat melihat responsnya, dan apakah responsnya berhasil atau tidak (200 OK). Anda juga dapat memasukkan yang lain ke
alert()
dalamcomplete
panggilan balik, yang tentunya harus dipanggil.sumber
success
, maka itu tidak berhasil. karena jawabannya adalah 200 OK, balasan Tatu tampaknya masuk akal, tetapi untuk pemecahan masalah lebih lanjut, Anda dapat menggunakan acara lain, yang disebutcomplete
yang selalu dipanggil, terlepas dari apakah permintaan berhasil atau tidak (success
hanya terjadi jika permintaan berhasil).complete: function (xhr, status) { alert('complete: '+status); }
Saya memiliki masalah yang sama. itu terjadi karena
javascript
mengharapkanjson
tipe data dalam mengembalikan data. tetapi jika Anda menggunakan gema atau mencetak dalam php Anda situasi ini terjadi. jika Anda menggunakanecho
fungsi dalamphp
untuk mengembalikan data, Cukup hapusdataType : "json"
berfungsi dengan cukup baik.sumber
Saya mengembalikan JSON yang valid, mendapatkan respons 200 dalam panggilan balik "lengkap" saya, dan bisa melihatnya di konsol jaringan chrome ... TAPI saya belum menentukan
begitu saya lakukan, tidak seperti "jawaban yang diterima", itu benar-benar memperbaiki masalah.
sumber
Saya menggunakan XML untuk membawa hasilnya kembali dari php di server ke halaman web dan saya memiliki perilaku yang sama.
Dalam kasus saya alasannya adalah, bahwa tag penutup tidak cocok dengan tag pembuka.
sumber
Saya mengalami masalah ini menggunakan fungsi ajax untuk memulihkan kata sandi pengguna dari Magento. Acara sukses tidak dipecat, maka saya menyadari ada dua kesalahan:
Jadi setiap kali saya mencoba menggunakan json_eoncde () untuk menyandikan array yang kembali, fungsi itu tidak berfungsi karena salah satu indeksnya memiliki karakter non-utf, kebanyakan dari mereka aksentuasi dalam kata-kata Portugis Brasil.
sumber
Saya mencoba mengembalikan string dari controller tetapi mengapa kontrol kembali ke blok kesalahan tidak berhasil ajax
sumber
Saya menghadapi masalah yang sama ketika meminta pengontrol yang tidak mengembalikan respons keberhasilan, ketika memodifikasi pengontrol saya untuk mengembalikan masalah pesan berhasil diselesaikan. perhatikan menggunakan kerangka Lavalite. sebelum:
ini bekerja untuk saya
sumber
Saya memiliki masalah yang sama saya menyelesaikannya dengan cara itu: ajax saya:
Baik. Masalahnya bukan dengan json tetapi hanya respon php. Sebelumnya: respons php saya adalah:
Sekarang:
Sekarang kesuksesan saya berhasil. PS. Maaf jika ada sesuatu yang salah tetapi ini adalah komentar pertama saya di forum ini :)
sumber
dalam kasus saya kesalahannya adalah ini di sisi server dan karena alasan itu mengembalikan html
sumber
Tambahkan 'kesalahan' callback (seperti 'sukses') dengan cara ini:
Jadi, dalam kasus saya, saya melihat di konsol:
sumber
Anda harus mendeklarasikan callback Sukses DAN Kesalahan. Menambahkan
harus memperbaiki masalah
sumber
The Keberhasilan callback membutuhkan dua argumen:
Juga pastikan bahwa
submit1.php
set header tipe konten yang tepat:application/json
sumber
success
mengambil dua argumen tampaknya sama sekali tidak relevan dengan pertanyaan itu. Anda dapat meneruskan sejumlah parameter ke fungsi javascript, terlepas dari berapa banyak yang diterima dalam deklarasi, jadi itu jelas bukan penyebab masalah ini, dan karena tidak ada nilaidata
atautextStatus
sedang digunakan dalam keberhasilan panggilan balik, sepertinya ada tidak ada alasan bagus untuk mendeklarasikannya dalam fungsi sama sekali.