返回Javascript变量的AJAX调用

返回Javascript变量的AJAX调用,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,努力将AJAX结果变量返回到JavaScript 请注意,下面的$.ajax调用是同步异步的:false Ajax调用 Ajax PHP 它从函数中很好地获取URL VARABLE,但不返回任何内容 任何帮助都会很好 该代码在客户端和服务器端都存在问题 客户端: 您的getState永远不会返回任何内容,因此除了StateURL的未定义之外,您不会看到任何内容也就不足为奇了 不要使用同步ajax。这会导致糟糕的用户体验。但如果你真的真的想继续使用它,你可以这样做: function getSta

努力将AJAX结果变量返回到JavaScript

请注意,下面的$.ajax调用是同步异步的:false

Ajax调用

Ajax PHP

它从函数中很好地获取URL VARABLE,但不返回任何内容


任何帮助都会很好

该代码在客户端和服务器端都存在问题

客户端: 您的getState永远不会返回任何内容,因此除了StateURL的未定义之外,您不会看到任何内容也就不足为奇了

不要使用同步ajax。这会导致糟糕的用户体验。但如果你真的真的想继续使用它,你可以这样做:

function getState(state) {
    var result; // <=== Where we'll put our result
    $.ajax({
        url: 'getSearchState.php',
        data: {"state": state},
        type: 'GET',
        async: false,
        success: function(data) {
            // Remember the result;
            result = data;
        },
        error: function() {
            result = /*...whatever you want to use to signal an error */;
        }
    });

    // Return the result
    return result;
}
注意,我将参数的名称更改为state,因为它不是回调

但同样,不要使用同步ajax。相反,使用回调或承诺

承诺:

function getState(state) {
    return $.ajax({
        url: 'getSearchState.php',
        data: {"state": state},
        type: 'GET'
    });
}
用法:

getState(URL)
    .done(function(StateURL) {
        // Use it
    })
    .fail(function() {
        // Failed
    });
getState(URL, function(StateURL) {
    // Use it, check for error
});
回拨:

function getState(state, callback) {
    $.ajax({
        url: 'getSearchState.php',
        data: {"state": state},
        type: 'GET',
        success: function(data) {
            // Call the callbback with the result
            callback(data);
        },
        error: function() {
            // Call the callback with an error
            callback(/*...whatever you want to use tosignal an error */);
        }
    });
}
用法:

getState(URL)
    .done(function(StateURL) {
        // Use it
    })
    .fail(function() {
        // Failed
    });
getState(URL, function(StateURL) {
    // Use it, check for error
});
服务器端: 同样,您将从PHP代码返回一个字符串。但这不会输出它。要在客户端使用它,您需要输出它,例如echo和类似的内容。为了便于JavaScript使用,您可能需要对其进行json_编码,以确保其采用JavaScript可以理解的格式:

echo json_encode$stateVal; 然后在success或done函数中,对其使用JSON.parse:

result=JSON.parsedata;
这是jQuery,在本例中,您可以在该上下文上指定上下文和success函数集变量。。。。一个有点粗糙的解决方案,但它会起作用。另外,看看ES6中的箭头函数和承诺,它可以帮助您很多,并为您提供有关整个问题的新视角


还有一件重要的事!!默认情况下,Ajax是异步的,因此您需要以某种方式通知您的StateURL何时数据将在这里再次准备好,并向您的服务承诺

并且getStateI中没有返回我看到$stateVal是一个数组,所以echo json_encode$stateVal;return做了完全不同的事情。这将以JSONString的形式返回数组。您无法传回PHP数组并希望在中理解它javascript@slbetman:不,这次不行。它不是异步的。异步:false,已弃用并将被删除。不要用它!尽管如此,问题包含在问题中,但没有返回任何信息——事实上。作为@AlexK。指出,没有回报。问题的陈述和问题本身已经包含在整个前提中。它真的需要保持开放吗?写得很好,我可以看到到处都是建筑!谢谢你。然而,我相信它正在工作,但是在var StateURL=getStateURL中没有VARABLE的数据;请看,虽然$StateVal是一个字符串而不是一个array@T.J.Crowder这正是我的评论所要表达的。但是你需要回显它,而不是返回它,还要对它进行json_编码,而他并没有这样做。看问题的PHP部分,我承认我假设他正在创建一个数组,但没有注意到他也把它搞砸了
function getState(state, callback) {
    $.ajax({
        url: 'getSearchState.php',
        data: {"state": state},
        type: 'GET',
        success: function(data) {
            // Call the callbback with the result
            callback(data);
        },
        error: function() {
            // Call the callback with an error
            callback(/*...whatever you want to use tosignal an error */);
        }
    });
}
getState(URL, function(StateURL) {
    // Use it, check for error
});