Saya mencoba menghubungkan skrip ke aplikasi Microsoft World-Wide Telescope. Yang terakhir mendengarkan pada port 5050 untuk perintah. Ini berjalan pada mesin yang sama dengan browser (Chrome sekarang, tapi sejauh yang saya tahu perilakunya sama dengan Firefox 7 dan IE 9).
Saya mengirim header "Access-Control-Allow-Origin: *" dengan file html asli untuk mencoba menghilangkan batasan XSS sebagai masalah saya.
Kode saya untuk mengakses WWT adalah sebagai berikut:
$.ajax({
type: 'POST',
url: url,
data: data,
crossDomain: true,
success: success,
dataType: dataType
});
url dalam hal ini adalah "http: //127.0.0.1: 5050 / layerApi.aspx? cmd = new & ..." (jelas ... adalah singkatan di sini untuk beberapa parameter tambahan).
Melihat diagnostik jaringan di Chrome, saya dapat melihat ini:
Request URL:http://127.0.0.1:5050/layerApi.aspx?cmd=new&...
Request Headersview source
Accept:application/xml, text/xml, */*; q=0.01
Content-Type:application/x-www-form-urlencoded
Origin:http://gwheeler4
Referer:http://gwheeler4/conceptconnect.html
User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.186 Safari/535.1
Permintaan akan keluar - Saya melihat WWT membuat layer baru. Namun, saya tidak mendapatkan panggilan balik. Jika saya menambahkan callback error yang dipanggil, tetapi properti error pada objek jqXHR hanya "error" dan statusnya 0. Jika saya melihat permintaan jaringan di Chrome, saya melihat "(dibatalkan)" sebagai status dan tidak ada respons .
Jika saya mengambil URL yang sama dan menempelkannya di tab browser baru, saya dapat melihat bahwa tanggapannya adalah XML yang diharapkan.
Tentu saja, perbedaannya di sini adalah bahwa ini adalah GET bukan POST, tetapi saya sudah mencobanya di skrip saya dan tidak ada bedanya.
Saya cukup bingung dengan ini dan akan menghargai ide-ide segar.
sumber
error
panggilan balik untuk melihat apakah itu kembali dengan kesalahan?Jawaban:
Jika ada orang lain yang mengalami ini, masalah yang kami hadapi adalah kami membuat permintaan ajax dari sebuah tautan, dan tidak mencegah tautan untuk diikuti. Jadi jika Anda melakukan ini dalam sebuah
onclick
atribut, pastikanreturn false;
juga.sumber
return false
di akhir Andaonsubmit
."return false;"
memberi tahu formulir dan tautan untuk membatalkan tindakan. Ini awalnya dimaksudkan untuk validasi formulir javascript, di mana fungsi validasi akan mengembalikan false jika formulir tidak valid, menghentikan formulir untuk dikirim.e.preventDefault();
, di manae
adalahonclick
parameter event.Jika Anda menggunakan Chrome, Anda tidak dapat melihat informasi yang cukup di panel jaringan Chrome standar untuk menentukan akar penyebab
(canceled)
permintaan.Anda perlu menggunakan
chrome://net-internals/#events
yang akan menunjukkan kepada Anda detail mengerikan dari permintaan yang Anda kirim - termasuk pengalihan tersembunyi / informasi keamanan tentang cookie yang dikirim, dll.misalnya, berikut ini menunjukkan pengalihan yang tidak saya lihat di jejak jaringan - karena cookie saya tidak dikirim lintas sub-domain:
t=1374052796448 [st= 1] +URL_REQUEST_START_JOB [dt=261] --> load_flags = 143540481 (DO_NOT_SAVE_COOKIES | DO_NOT_SEND_AUTH_DATA | DO_NOT_SEND_COOKIES | ENABLE_LOAD_TIMING | MAYBE_USER_GESTURE | REPORT_RAW_HEADERS | VALIDATE_CACHE | VERIFY_EV_CERT) --> method = "GET" --> priority = 2 --> url = "https://...." ... t=1374052796708 [st=261] HTTP_TRANSACTION_READ_RESPONSE_HEADERS --> HTTP/1.1 302 Moved Temporarily Content-Type: text/html Date: Wed, 17 Jul 2013 09:19:56 GMT ... t=1374052796709 [st=262] +URL_REQUEST_BLOCKED_ON_DELEGATE [dt=0] t=1374052796709 [st=262] CANCELLED t=1374052796709 [st=262] -URL_REQUEST_START_JOB --> net_error = -3 (ERR_ABORTED)
sumber
Dalam kasus saya, saya mengalami
type='submit'
jadi ketika saya mengirimkan formulir, halaman memuat ulang sebelum ajax hit berjalan sehingga solusi sederhana adalah memilikinyatype="button"
. Jika Anda tidak menentukan jenisnya, itusubmit
secara default jadi Anda harus menentukantype="button"
type='submit'
=>type='button'
ATAU
Tidak ada tipe =>
type='button'
sumber
Saya punya masalah serupa. Dalam kasus saya, saya mencoba menggunakan layanan web pada server apache + django (layanan ini ditulis sendiri). Saya memiliki hasil yang sama seperti Anda: Chrome mengatakan itu dibatalkan sementara FF melakukannya dengan baik. Jika saya mencoba mengakses layanan secara langsung di browser alih-alih ajax, itu akan berhasil juga. Mencari-cari di Google, saya menemukan bahwa beberapa versi apache yang lebih baru tidak mengatur panjang respons dengan benar di header respons, jadi saya melakukan ini secara manual. Dengan django, yang harus saya lakukan adalah:
response['Content-Length'] = len(content)
Jika Anda memiliki kendali atas layanan yang Anda coba akses, cari tahu cara mengubah header respons di platform yang Anda gunakan, jika tidak, Anda harus menghubungi penyedia layanan untuk memperbaiki masalah ini. Rupanya, FF dan banyak browser lainnya dapat menangani situasi ini dengan benar, tetapi desainer Chrome memutuskan untuk melakukannya seperti yang ditentukan.
sumber
Saya memiliki masalah serupa. Dengan menggunakan chrome: // net-internals / # events, saya dapat melihat bahwa masalah saya disebabkan oleh beberapa pengalihan diam-diam. Permintaan get saya dipecat dalam skrip onload. Url-nya berbentuk " http://example.com/inner-path " dan 301 secara permanen dialihkan ke "/ inner-path". Untuk memperbaiki masalah, saya baru saja mengubah url menjadi "/ inner-path" dan itu memperbaiki masalah. Saya masih tidak tahu mengapa skrip yang bekerja seminggu yang lalu tiba-tiba memberi saya masalah ... Semoga ini membantu seseorang
sumber
(Menggunakan Formulir Web ASP.NET)
Masalah saya adalah saya mencoba untuk mengaktifkan Ajax dari peristiwa klik tombol kirim yang memiliki pengaturan peristiwa klik sisi server. Saya harus membuat tombol hanya dengan tombol sederhana (yaitu
<input type="button">
)sumber
Saya mengalami masalah yang sama, bagi saya, saya membuat iframe untuk sementara dan saya menghapus iframe sebelum ajax selesai, sehingga browser akan membatalkan permintaan ajax saya.
sumber
Memperluas jawaban @ Kazetsukai, Anda mungkin mengalami masalah ini jika Anda membuat permintaan AJAX dari pengguna yang mengklik tautan.
Jika Anda mengatur tautan Anda seperti ini:
<a href="#" onclick="soAjax()">click me!</a>
Dan kemudian handler javascript seperti berikut:
soAjax() { $.ajax({ ... all your lovely parameters ... }); }
Untuk mencegah browser Anda mengikuti tautan dan membatalkan permintaan apa pun yang sedang berlangsung, Anda harus menambahkan
return false
ataue.preventDefault()
menghentikan penyebaran peristiwa klik:soAjax() { $.ajax({ ... etc ... }); return false; }
Atau:
soAjax(e) { $.ajax({ ... etc ... }); e.preventDefault(); }
sumber
Ada dua kemungkinan saat permintaan AJAX dijatuhkan (jika bukan permintaan Cross-Origin):
Solusi untuk 1) : Tambahkan
return false;
ataue.preventDefault();
di event handler.Solusi untuk 2) : Tambahkan opsi batas waktu saat membentuk permintaan AJAX. Contoh di bawah ini.
$.ajax({ type: 'POST', url: url, timeout: 86400, data: data, success: success, dataType: dataType });
Untuk permintaan Lintas-asal, periksa header HTTP Cross-Origin Resource Sharing (CORS).
sumber
Saya mendapat kesalahan ini saat membuat permintaan menggunakan http ke url yang membutuhkan https. Saya kira panggilan ajax tidak menangani pengalihan. Ini terjadi bahkan dengan opsi ajax crossDomain disetel ke true (pada JQuery 1.5.2).
sumber
Untuk kasus Dropzone.js. Dalam kasus saya itu disebabkan karena nilai
timeout
opsi terlalu rendah secara default. Jadi tingkatkan dengan kebutuhan Anda.{ // other dropzone options timeout: 60000 * 10, // 10 minutes ... }
sumber
Dalam kasus saya, saya menulis ulang mod Apache cocok dengan url dan mengarahkan permintaan ke https.
Lihat permintaan di chrome: // net-internals / # events.
Ini akan menunjukkan log internal permintaan. Periksa pengalihan.
sumber
Saya memiliki masalah yang sama, tetapi dalam kasus saya ternyata itu adalah masalah cookie. Orang-orang yang bekerja di bagian belakang telah mengubah jalur cookie JSESSIONID yang disetel saat kami masuk ke aplikasi kami, dan saya memiliki cookie lama dengan nama itu di komputer saya, tetapi dengan jalur lama. Jadi ketika saya mencoba masuk ke browser (Chrome) mengirim dua cookie yang disebut JSESSIONID, dengan nilai berbeda, ke server - yang bisa dimengerti membingungkannya - jadi itu membatalkan permintaan. Menghapus cookie dari komputer saya memperbaikinya.
sumber
Saya mendapatkan kesalahan ini dengan cara yang lebih menyeramkan: Tab jaringan dan chrome: // net-internals / # events tidak menampilkan permintaan setelah js selesai. Saat menjeda js dalam panggilan kesalahan tab jaringan memang menunjukkan permintaan sebagai (dibatalkan). Itu secara konsisten dipanggil untuk tepat satu (selalu sama) dari beberapa permintaan serupa di halaman web. Setelah memulai ulang Chrome, kesalahan tidak muncul lagi!
sumber
Saya telah membatalkan di Firefox . Beberapa panggilan ajax bekerja dengan baik untuk saya, tetapi gagal untuk rekan kerja yang benar-benar harus menggunakannya.
Ketika saya memeriksanya melalui trik Chrome yang disebutkan di atas, saya tidak menemukan ada yang mencurigakan. Saat memeriksanya di firebug, itu menunjukkan animasi 'memuat' setelah dua panggilan mallicous, dan tidak ada tab hasil.
Solusinya sangat sederhana: buka riwayat, temukan situs web, klik kanan -> lupakan situs web.
Lupakan, bukan hapus.
Setelah itu, tidak ada masalah lagi. Dugaan saya ini ada hubungannya dengan .htaccess.
sumber
Dalam kasus saya, itu adalah garis miring yang hilang di url. Menambahkan garis miring memecahkan masalah saya.
sumber
Saya mengalami masalah ini dengan jaringan 3G tertentu.
Itu akan selalu gagal pada permintaan DELETE dengan
net_error = -101
di chrome: // net-internals / # events.Jaringan lain berfungsi dengan baik jadi saya berasumsi ada server proxy yang salah atau semacamnya.
sumber