Javascript Chrome扩展中的跨域Ajax在函数内部失败
我的扩展正在做一个跨域ajax帖子——每当我执行该功能时:Javascript Chrome扩展中的跨域Ajax在函数内部失败,javascript,jquery,google-chrome,google-chrome-extension,Javascript,Jquery,Google Chrome,Google Chrome Extension,我的扩展正在做一个跨域ajax帖子——每当我执行该功能时: $.ajax({ crossDomain: true, type: 'post', url: 'url/to/my.php', data: { "username" : $user, "score" : $score, "action" : "update" }, success: function (data) { if
$.ajax({
crossDomain: true,
type: 'post',
url: 'url/to/my.php',
data: {
"username" : $user,
"score" : $score,
"action" : "update"
},
success: function (data) {
if (data.replace(/"/g,"") === 'true') {
$('#form-container').html('<p>Score!</p>');
} else {
$('#form-container').prepend('<p>No score.</p>');
}
},
error: function (xhr, ajaxOptions, thrownError) {
console.log(thrownError);
console.log('error');
}
});
$(document).ready( function () {
$('#score').submit( function (e) {
var user = $('#username').val();
var score = $('#score').val();
if (user && score) {
send_score(user, score);
}
});
});
$.ajax({
跨域:是的,
键入:“post”,
url:'url/to/my.php',
数据:{
“用户名”:$user,
“分数”:$score,
“操作”:“更新”
},
成功:功能(数据){
if(data.replace(/“/g,”)==='true'){
$(“#表单容器”).html(“Score!”);
}否则{
$(“#表单容器”)。前置(“无得分。”);
}
},
错误:函数(xhr、ajaxOptions、thrownError){
控制台日志(thrownError);
console.log('error');
}
});
问题是,如果我将此调用放在任何包含函数之外(单独)然后它就可以正常运行了。第二次我把它放在函数中,Chrome就会取消ajax调用。我没有收到任何错误,调用中的控制台日志记录不会向控制台发送任何内容,我看到的唯一错误是在录制网络时的开发工具中(其中显示了被取消的请求).这是故意的还是我遗漏了什么
它在ajax调用中使用表单数据,因此将表单数据单独保留并不是一个真正的选项。是否有其他建议的方法来执行相同的操作
完整代码为:
$(document).ready( function () {
$('#score').submit( function (e) {
var user = $('#username').val();
var score = $('#score').val();
if (user && score) {
send_score(user, score);
}
});
});
function send_score(user,score) {
console.log(user + ' ' + score);
$.ajax({
crossDomain: true,
type: 'post',
url: 'url/up/my.php',
data: {
"username" : user,
"score" : score,
"action" : "login"
},
success: function (data) {
if (data.replace(/"/g,"") === 'true') {
$('#form-container').html('<p>Score!</p>');
} else {
$('#form-container').prepend('<p>No score.</p>');
}
},
error: function (xhr, ajaxOptions, thrownError) {
console.log(thrownError);
console.log('error');
}
});
}
$(文档).ready(函数(){
$(“#分数”)。提交(函数(e){
var user=$('#username').val();
var score=$('#score').val();
if(用户和分数){
发送_分数(用户,分数);
}
});
});
函数发送分数(用户,分数){
console.log(用户+“”+分数);
$.ajax({
跨域:是的,
键入:“post”,
url:'url/up/my.php',
数据:{
“用户名”:用户,
“分数”:分数,
“操作”:“登录”
},
成功:功能(数据){
if(data.replace(/“/g,”)==='true'){
$(“#表单容器”).html(“Score!”);
}否则{
$(“#表单容器”)。前置(“无得分。”);
}
},
错误:函数(xhr、ajaxOptions、thrownError){
控制台日志(thrownError);
console.log('error');
}
});
}
提前感谢。我注意到,如果ajax调用成功,您需要传递两个变量$user和$score。。当您将整个调用放在函数中时,它们是否可能已超出范围?因此可能会取消ajax调用?但是,如果它们存在于全球范围内,则应该没有问题。。你能检查一下变量是否未定义吗?这可能是问题所在 经过几个小时的搜索,我发现这个函数:
$.ajax({
crossDomain: true,
type: 'post',
url: 'url/to/my.php',
data: {
"username" : $user,
"score" : $score,
"action" : "update"
},
success: function (data) {
if (data.replace(/"/g,"") === 'true') {
$('#form-container').html('<p>Score!</p>');
} else {
$('#form-container').prepend('<p>No score.</p>');
}
},
error: function (xhr, ajaxOptions, thrownError) {
console.log(thrownError);
console.log('error');
}
});
$(document).ready( function () {
$('#score').submit( function (e) {
var user = $('#username').val();
var score = $('#score').val();
if (user && score) {
send_score(user, score);
}
});
});
结尾需要一行:
return false;
现在,函数正在工作,ajax调用正在成功进行。如果我在ajax调用之前注销变量,并且在函数内部,它们将正确显示在控制台中。为了更好地衡量,我在全局范围内定义了变量,但它仍然存在。我最后放置了“returnfalse;”在我的$(document).ready()函数的末尾,现在正在进行ajax调用。本文引用: