2016-04-04 22 views
0

ben şu var.JavaScript tepkisi ve ajax isteği

Sonra arama sonuç döndürmeden önce kod yürütülür gibi görünüyor ama neden? Söz, düzgün bir şekilde ayarlanmadı mı?

Şimdiden çok teşekkürler.

+1

Arama geri dönülmeden önce kodun yürütülmesini sağlayan nedir? –

+0

@JesseLee Çünkü bir kesme noktası koyarsam, uyarıdaki nesneyi görebilirim. – S4rg0n

cevap

0

Burada Promise.resolve yapmak gereksiz, çünkü $ .ajax çağrı zaten bir söz verir. bu deneyin:

function wikiAjax (searchURL) { 
    return $.ajax({ 
     url: searchURL, 
     jsonp: "callback", 
     dataType: 'jsonp', 
     xhrFields: { 
      withCredentials: true 
     } 
    }); 
} 

$(".search-form").submit(function() { 
    var searchText = $('#search').val(); 
    var searchURL = "https://en.wikipedia.org/w/api.php?format=json&action=query&generator=search&gsrsearch=" + searchText + "&gsrlimit=15&prop=extracts&exsentences=3&exintro=&explaintext&exlimit=max&callback=JSON_CALLBACK"; 
    console.log(searchURL); 
    var wikiResponse = wikiAjax(searchURL); 
    wikiResponse.done(function(data) { 
     alert(data); 
    }).fail(function(err) { 
     alert("The call has been rejected"); 
    }); 
}); 

Bu plunker bir çalışma (ve göstermek için modifiye): Ben Promise.resolve (düşünmek https://plnkr.co/edit/qyc4Tu1waQO6EspomMYL?p=preview

+0

Teşekkürler @pkeuter ama çözümünüzle birlikte, kırılma noktasında bile çalışmıyor. – S4rg0n

+0

@ S4rg0n plnkr'a baktınız mı? Kesinlikle çalışıyor, bu yüzden başka bir şey yapmalısınız. Yukarıda belirtildiği gibi, jQuery'nin yeni bir sürümünü mi kullanıyorsunuz? –

0

) açıkça sen olması gerektiği bunu desteklediğinden emin olmak sürece bir ES6 özelliğidir çalışmıyor

Ama şu biçimde söz dönmek) $ .ajax (sizin için şanslı:

var promise = $.ajax({ 
    url: "/myServerScript" 
}); 

promise.done(mySuccessFunction); 
promise.fail(myErrorFunction); 

(daha sonra değil() ve kodunuzda yazılmış gibi catch())

+0

Teşekkür ederiz @chenop ama tam olarak aynı davranıyor – S4rg0n

+0

hangi JQuery sürümünü kullanıyorsunuz? – chenop

+0

2,2,2 var. Jesse Lee çözümü çalıştı, sorun formu sunmak oldu :-) Teşekkür ederim! – S4rg0n

4

Burada neler olabileceğini düşünüyorum, tarayıcı ajax çağrısının yanı sıra formda varsayılan gönderim etkinliğini yürütüyor. Sonuç, pencerenin boşaltılması ve yeniden yüklenmesidir. koyarak

Dene: işleyicisindeki

event.preventDefault(); 

.

$(".search-form").submit(function(event) { 
    event.preventDefault(); 
    var searchText = $('#search').val(); 
    var searchURL = "https://en.wikipedia.org/w/api.php?format=json&action=query&generator=search&gsrsearch=" + searchText + "&gsrlimit=15&prop=extracts&exsentences=3&exintro=&explaintext&exlimit=max&callback=JSON_CALLBACK"; 
    console.log(searchURL); 
    var wikiResponse = wikiAjax(searchURL); 
    wikiResponse.then(function(data) { 
     alert(data); 
    }, 
    function() { 
     alert("The call has been rejected"); 
    } 
); 
}); 
+0

Harika @Jesse Lee !!! İşe yarıyor!! Lütfen açıklar mısın? – S4rg0n

+1

Bu nedenle, gönder düğmesine sahip bir form oluşturursanız, tarayıcı varsayılan olarak bu gönderim etkinliğini bu formun 'eylemine' giderek işleyebilir. Muhtemelen

öğesinde bir özellik olarak sağlanan hiçbir eyleminiz olmadığı için tarayıcı geçerli URL'yi form eylemi olarak kullanacaktır. Sonuç aslında bir sayfa yenileme olacaktır. Sayfa ajax çağrısından önce yenileniyor olduğundan, temelde iptal edildi. Tarayıcının varsayılan işleyicisini e.preventDefault() ile engelleyerek, tarayıcının sayfayı yenilemesini durdurursunuz. –

+0

Çok teşekkür ederim! – S4rg0n