函数返回Ajax响应-值未定义?jQuery Ajax

函数返回Ajax响应-值未定义?jQuery Ajax,jquery,ajax,json,Jquery,Ajax,Json,当我提醒jsonServerResponse函数返回的值时,它的值是未定义的——尽管JSON是从process.php页面返回的 function jsonServerResponse(operation, JSOoptionalData) { JSOoptionalData = (typeof JSOoptionalData == "undefined") ? 'defaultValue' : JSOoptionalData var jqxhr = $.ajax

当我提醒jsonServerResponse函数返回的值时,它的值是未定义的——尽管JSON是从process.php页面返回的

function jsonServerResponse(operation, JSOoptionalData) {
        JSOoptionalData = (typeof JSOoptionalData == "undefined") ? 'defaultValue' : JSOoptionalData
        var jqxhr = $.ajax({
            type: "POST",
            url: "process.php",
            data: "apicommand=" + JSOoptionalData,
            success: function (json) {
                return jQuery.parseJSON(json);
            }
        });
}

alert("Response as JS Object: "+jsonServerResponse("operation"));

我知道问题在于异步请求完成之前发出的警报功能,但我不确定如何解决此问题。非常感谢您的建议:

您解决了问题,ajax是一种异步操作,您只能在成功回调中使用返回的数据:

function jsonServerResponse(operation, JSOoptionalData) {
    // What that line suppose to do???
        JSOoptionalData = (typeof JSOoptionalData == "undefined") ? 'defaultValue' : JSOoptionalData
        var jqxhr = $.ajax({
            type: "POST",
            url: "process.php",
            data: "apicommand=" + JSOoptionalData,
            dataType: "json", // Change the dataType to json.
            success: function (json) {
                console.log("Response as JS Object:") 
                console.log(json);
            }
        });
}

这是因为AJAX请求是异步的,所以在调用完成之前返回,所以函数总是返回null

您需要从成功回调本身调用依赖于AJAX调用的代码。试试这个:

function jsonServerResponse(operation, JSOoptionalData) {
    JSOoptionalData = (typeof JSOoptionalData == "undefined") ? 'defaultValue' : JSOoptionalData
    var jqxhr = $.ajax({
        type: "POST",
        url: "process.php",
        data: "apicommand=" + JSOoptionalData,
        success: function (json) {
            alert("Response as JS Object: " + json);

            // to see more information about the object returned, use console.log:
            console.log(json);
        }
    });
}

jsonServerResponse("operation")

好吧,我是从另一篇帖子里猜出来的。结果可以在成功回调中处理,也可以添加本身是回调函数的参数,并将ajax请求的结果应用于回调

function jsonServerResponse(operation, callback, JSOoptionalData) {
        JSOoptionalData = (typeof JSOoptionalData == "undefined") ? 'defaultValue' : JSOoptionalData
        jqxhr = $.ajax({
            type: "POST",
            contentType: "application/json",
            url: "process.php",
            data: "apicommand=" + operation + "&optionaldata" + JSON.stringify(JSOoptionalData),
            dataType: "json",
            success: function (json) {
                if(typeof callback === 'function') callback.apply(this, [json]);
            }
        });
}


jsonServerResponse("get_something_from_server", function(returnedJSO){
     console.log(returnedJSO.Result.Some_data);
}, "optional_data");
而gdoron,你所问的那句话使得第三个参数是可选的。我听说这是一种很好的做法,如果您要将一些数据传递到服务器上,但您不知道要添加多少变量作为可选参数,只需传递一个js对象,将其转换为JSON字符串,并在服务器端对其进行解码


和平!:

是否有任何方法可以将请求中的数据捕获到成功回调之外的变量中?@TaylorMac您仍然可以将其放入全局变量中,但必须非常小心,仅在AJAX调用完成后才使用该变量。最好的方法是从成功处理程序调用函数,传递AJAX调用的结果。