我有以下代码:
<script type="text/javascript">
$(document).on("click", "#leftconversation", function(){
var self = this;
var cid = $(this).attr('class'); // getting the user id here
var request = $.ajax({
url: "conversation.php",
type: "POST",
data: { cid: cid },
beforeSend: function(){
self.html("Loading please wait...");
}
});
//WHEN SUCCESS
request.success(function( data ) {
$("#right").html(data); // replace the right div with echoed content from php file
});
});
</script>
但是,我的控制台一直给我错误:“SyntaxError:Function语句必须有一个名字。” 我似乎无法解决问题,这就是为什么AJAX代码没有运行。这个错误来自哪里?
根据Todd的说法,我将代码更改为以下内容:
<script type="text/javascript">
$(document).on("click", "#leftconversation", function(){
var self = this;
var cid = $(this).attr('class'); //you are getting the user id here
var request = $.ajax({
url: "conversation.php",
type: "POST",
data: { cid: cid },
beforeSend: function(){
self.html("Loading please wait...");
},
success: function(data) {
$("#right").html(data);
},
error: function(request, err){ console.log('An Error Occured' + err); }
});
});
</script>
它修复了第一个错误,但现在它告诉我TypeError:undefined不是一个函数(评估'self.html(“正在加载请稍候......”)')
这是固定的,应该使用var self = $(this);代替
答案 0 :(得分:1)
您无需使用变量即可修复问题。只需设置context:
来电的$.ajax
属性。
var request = $.ajax({
url: "conversation.php",
type: "POST",
data: { cid: this.className }, // Quicker way to get the class.
context: $(this), // The context in the callback will be the jQuery object.
beforeSend: function() {
// v-- This is now a jQuery object.
this.html("Loading please wait...");
}
});
答案 1 :(得分:1)
您发布的代码是正确的。错误必须来自其他地方。也就是说,无论错误在哪里,这里都要寻找:
您可能知道,函数可以这样定义:
function greet(name) { /* ... */ }
这适用于语句上下文。函数也可以在表达式上下文中使用:
[1, 2, 3].forEach(function(item) { alert(item); });
在表达式上下文中,我们可以省略名称,如上所述,或者我们可以包含名称:
[1, 2, 3].forEach(function foo(item) { alert(item); });
然而,我们不能做的是拥有一个没有名称的独立函数声明。这是一个错误:
function(name) { /* ... */ }
这就是你(现在的第一个)问题所在。
undefined
不是函数”您更新的代码有不同的问题。设置self = this
时,this
是DOM元素,而不是jQuery对象。您稍后尝试使用self.html
,但DOM元素没有html
属性。如果您希望使用jQuery方法,则必须在赋值(self = $(this)
)或使用点$(self).html
时将元素转换为jQuery对象。
答案 2 :(得分:1)
根据我的评论
$(document).on("click", "#leftconversation", function(){
var $self = $(this);
var cid = $(this).attr('class'); // getting the user id here
var request = $.ajax({
url: "conversation.php",
type: "POST",
data: { cid: cid },
beforeSend: function(){
$self.html("Loading please wait...");
}
});
//WHEN SUCCESS
request.success(function( data ) {
$("#right").html(data); // replace the right div with echoed content from php file
});
});