我創建了一個小取指令函數,基本上爲我做了一個ajax POST
以及爲簡潔起見刪除了一些其他的東西。在這個函數中,我傳遞了一個回調,當成功回調被觸發時它應該會觸發。作爲回調函數使用時,Javascript函數的火順序
function ajax_fetch(url, fetch, data, callback) {
$.ajax({
type: "Post",
url: baseurl + url,
data: data,
contentType: "application/json",
dataType: "html",
success: function (response) {
fetch.html(response);
// if there's a callback, run it.
if (typeof callback == "function")
callback();
},
error: function (xhr, ajaxOptions, thrownError) {
handleErrors(xhr, ajaxOptions, thrownError);
}
});
}
下面我有一段代碼,我基本上在做2個ajax調用。第一個觸發一個正常的ajax POST
,然後成功後,調用我上面的函數,所有工作都按預期進行。
$("#markstatus").singleBind("click", function() {
var step = "{ step : " + $(this).data("step") + "}";
$.ajax({
type: "POST",
url: baseurl + "SetStatus",
data: step,
contentType: "application/json",
dataType: "html",
success: function (result) {
$("#header.container").html(result);
ajax_fetch("/StepIndex", $(".replaceable"), step,
function() {
window.alerts.success("Step Complete");
});
},
error: function (xhr, ajaxOptions, thrownError) {
handleErrors(xhr, ajaxOptions, thrownError);
}
});
});
但是現在的問題是:
$("#removestatus").singleBind("click", function() {
var step = "{ step : " + $(this).data("step") + "}";
ajax_fetch("RemoveStatus", $("#header.container"), step,
ajax_fetch("/StepIndex", $(".replaceable"), step,
function() {
window.alerts.warning("Step Re-Opened");
})
);
});
我想我可能是棘手的,由最初使用我的功能基本上做同樣的雙Ajax調用,然後在命中第一回調通另一個都應該是好的,花花公子。
但是,當我看到我的控制檯輸出:
customSpa.js:793 Object {url: "/StepIndex", fetch: jQuery.fn.init[1], data: "{ step : 1}", callbackl: function}
customSpa.js:801 requesting: /async//StepIndex
customSpa.js:793 Object {url: "RemoveStatus", fetch: jQuery.fn.init[1], data: "{ step : 1}", callbackl: undefined}
customSpa.js:801 requesting: /async/RemoveStatus
我可以看到它在調用內首先提取,然後在外。這是一個異步/承諾類型的問題,或者我究竟做錯了什麼?
什麼是'singleBind()'?這聽起來應該與[.one()](http://api.jquery.com/one/)相同。 – 2015-03-14 13:17:00
是singleBind()是我添加自己做的只是一個.off()和.on()這樣,如果我重新綁定一個處理程序後,它不會觸發多次的ajax事件...看起來像JQ已經照顧通過.one(),去圖,每當我做我認爲是聰明的,它已經完成:) – 2015-03-15 06:27:37