Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.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 在jQuery中提取ajax响应?_Javascript_Jquery - Fatal编程技术网

Javascript 在jQuery中提取ajax响应?

Javascript 在jQuery中提取ajax响应?,javascript,jquery,Javascript,Jquery,如何提取ajax响应的返回响应?要获得响应,我应该写: $.post('server.php',{x : 9}, function(response){ alert(response); }); 现在,我怎样才能从函数()中取出“response”{},因为它不存在于函数外部。。我想将其与其他值进行比较,我试图将其分配给一个全局变量和一个jQuery对象“$response”,但它总是“未定义”,而“response”本身具有正确的值!。。 一般来说,如果可能的话,我希望这样:) 提前

如何提取ajax响应的返回响应?要获得响应,我应该写:

$.post('server.php',{x : 9}, function(response){
    alert(response);
});
现在,我怎样才能从函数()中取出“response”{},因为它不存在于函数外部。。我想将其与其他值进行比较,我试图将其分配给一个全局变量和一个jQuery对象“$response”,但它总是“未定义”,而“response”本身具有正确的值!。。 一般来说,如果可能的话,我希望这样:)


提前谢谢:)

你不能。正如你不能做的那样:

var foo = jQuery('button').click(somefunction);
…并期望在foo中获得返回值

Ajax只是设置了一些代码,以便在服务器收到HTTP响应时运行


您需要设计代码,以便回调函数可以对数据执行您想要执行的操作。

由于ajax调用不同步,您想要执行的操作不会发生。解决方案是,将响应所需的任何逻辑放在回调函数中,并对上下文使用闭包变量。

通常是这样的,如果您的
dataType=“json”


将解析后的值作为有效的Jscript对象返回。通过向jQuery.ajax()提供{'async':false}参数,确保其同步XHR调用;如上所示。

您必须在回调方法中进行比较。使用jQuery 1.5中引入的新的、有光泽的工具,您可以以一种可读性很好的方式完成这项工作:

$.when(postToServer())
    .then(function(response){
        // Logic to compare response
    });

function postToServer(){
    var dfd = $.Deferred();
    $.post('server.php', {x : 9}, dfd.resolve);
    return dfd.promise();
};

我理解你的意思对吗?您已经做了
var-serverresponse
在文章之外,在文章中是否有
serverresponse=response
?据我所知,他希望发送一个XHR请求,并将响应转换为有效的JScript对象/变量,以便他可以在其他地方使用该值…@dksan是的,但总是返回未定义!请提供理由,当你否决答案时。。。谢谢!我猜人们会投反对票,因为你的答案与这个问题无关。@Niklas:OP不想将他的XHR请求的值作为有效的JS对象/变量检索,以便他可以在更高范围内的其他地方使用它吗?jQuery.post()只是jQuery.ajax()的另一个包装函数,那么我遗漏了什么?不,他想要访问变量
response
,在他执行
.post
的范围内,它已经是某种类型的完全有效的JS对象。这是行不通的,其他答案已经澄清了。JSON没有被提及。此外,您的代码被破坏的方式与OP完全相同。这行不通。哦,我明白了。你总是混淆异步和同步。现在一切都有了意义:)。在OP的问题中,
then
回调中的代码和成功回调中的代码有区别吗?在我看来,这可能是同一个问题。当在所有由“when”调用的函数中解析了Deffered时,就会调用“then”回调。事实上,这并没有解决问题,但正如我所说,IMHO使代码更具可读性。“ajax调用不是同步的”,是的,就是这样!!,我现在该怎么办:)
function myFunc ()
{
    var jqHXR = jQuery.ajax({
        async : false,
        dataType : "json"
    });

    return jQuery.parseJSON(jqXHR.responseText);
}
$.when(postToServer())
    .then(function(response){
        // Logic to compare response
    });

function postToServer(){
    var dfd = $.Deferred();
    $.post('server.php', {x : 9}, dfd.resolve);
    return dfd.promise();
};