Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Chrome扩展中的跨域Ajax在函数内部失败_Javascript_Jquery_Google Chrome_Google Chrome Extension - Fatal编程技术网

Javascript Chrome扩展中的跨域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帖子——每当我执行该功能时:

$.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调用。本文引用: