我有下面的knockout js代码..
设计代码
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/2.3.0/knockout-min.js"></script>
<div class="acmenu">
<ul id="accordion" data-bind="foreach: CategoryList">
<li data-bind="click$parent.categorySelected),attr: {iddata.CategoryId},htmldata.CategoryName">
</li>
</ul>
</div>
self.categorySelected = function (selectedCategory, event) {
$('#newproducttitle').hide();
event.preventDefault();
selectCategoryId = selectedCategory.CategoryId();
var refurbishedUrl = "/services/ShopService.asmx/XGetRefurbishedproducts";
$.ajax({
url: refurbishedUrl,
data: JSON.stringify({ ItemID: itemid, categoryid: selectCategoryId, language: lang }),
type: "POST",
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (data) {
/******Lines of code**********/
}});
}
此函数在每次点击时调用,但 ajax 请求仅在第二次点击时发送。我需要为第一次点击发送 ajax 请求,有什么解决方案吗....
这里我证明了一个js文件的驱动链接https://onedrive.live.com/redir?resid=143242b617ba6be2!6684&authkey=!AAJQbpV8ZQ7fnGI&ithint=file%2ctxt
最佳答案
虽然我们还没有足够的工作要做,但我认为它也是在第一次请求时调用(除非您已经在开发人员工具等中进行了验证)。它似乎在第二次点击时起作用的原因是 ajax 调用没有返回,而在第二次点击时它似乎起作用了。
试试这个来禁用按钮,直到 ajax 返回:
$.ajax({
url: refurbishedUrl,
data: ...,
type: "POST",
dataType: "json",
contentType: "application/json; charset=utf-8",
beforeSend:function(){ $(event.target).prop('disabled', true);},
}).done(function(data){
/*USE THIS INSTEAD OF success*/
}).fail(function(data){
/*USE THIS INSTEAD OF error*/
}).always(function(){
$(event.target).prop('disabled', false);
});
关于javascript - ajax 请求在 knockout js 中发送第二次点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34334831/