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