我有这段代码:
var callbackAfterLoad = function(data, ecBlock) {
ecBlock.html(data);
ecBlock.slideDown();
}
function bindevents(userInput, ecBlock, callbackAfterLoad) {
userInput.keyup(function () {
delay(function () {
$.post("/preview", {content:userInput.val()}, callbackAfterLoad(data, ecBlock));
}, 500);
});
}
这个错误:
Uncaught ReferenceError: data is not defined
但是当我查看jQuery示例时
$.post("test.php", function(data) {
alert("Data Loaded: " + data);
});
为什么我收到此错误?为什么jQuery示例工作而不是我的? (我们不能添加参数?)。是否定义了默认的$ .post回调,并且无法覆盖其签名?
答案 0 :(得分:6)
$.post
中的第三个参数应该是一个函数,但是当你这样做时:
$.post("/preview", {content:userInput.val()}, callbackAfterLoad(data, ecBlock))
第三个参数不是函数,而是函数的返回值。像这样:
fn = callbackAfterLoad // function reference
fn = callbackAfterLoad() // function execution and return value reference
在您的示例中执行时,data
尚不可用。正确的语法是:
$.post("/preview", {content:userInput.val()}, callbackAfterLoad)
如果需要将自定义参数传递给回调,可以创建一个新的代理函数,如下所示:
var callback = function(data) {
callbackAfterLoad.call(this, data, ecBlock);
};
$.post("/preview", {content:userInput.val()}, callback);
答案 1 :(得分:1)
尝试以另一种方式使用.post
方法:
$.post("/preview", {content:userInput.val()}, function(data){ callbackAfterLoad(data, ecBlock)} );
您的示例无效,因为您在callbackAfterLoad
实际“发生”之前立即呼叫.post
并返回数据。在jQuery示例中,回调函数仅作为处理程序注册,但不会立即触发。