2014-10-08 36 views
0

我需要基于对web方法的ajax调用创建一个promise。本来,我是有工作用这个方法:无法访问延迟对象中的jquery ajax responseText

$.ajax({ 
    url: window.location.pathname + "/LoadPage" 
)}.done(function(data){ 
    //do some stuff 
}).fail(function(){ 
    //do other stuff 
}); 

然后我跑进需要等待的东西来加载,否则做某件事之前的问题,所以我决定创建一个变量来保存的承诺目标。

var promiseObj = $.ajax({...}); 

然后创建一个命名函数调用

function someFunction(data){...} 

可以访问从服务器

var someData = promiseObj.responseText; 

响应,并调用它像

promiseObj.done(someFunction(someData)); 

,它没没有工作。我得到了未定义的错误。

于是,我只是console.log

console.log(promiseObj) //shows the object 
console.log(promiseObj.responseText) //gives undefined 

我在做什么错?如何使用此方法将数据从ajax调用发送到另一个函数?任何帮助,将不胜感激。

+2

只要使用'promiseObj.done(someFunction);'。请看下面的文档:http://api.jquery.com/jquery.ajax/#entry-examples – 2014-10-08 15:29:46

回答

2

首先,简单地删除.done调用中的函数包装 - 只需调用.done(someFunction)。这将确保由AJAX调用生成的所有参数都传递给someFunction。它还将确保在$.ajax调用中设置的任何this上下文也都正确传递。

修复之后,jqXHR对象应作为第三个参数传递给someFunction,因此您可以使用它访问.responseText

function someFunction(data, status, jqXHR) { 
    var text = jqXHR.responseText; 
    ... 
} 

promiseObj.done(someFunction); 
+0

这就是我最初的样子,而且工作得很好。我想将这个匿名函数移动到一个命名函数中。 'promiseObj.done(someFunction());' – 2014-10-08 15:38:45

+1

@RobM查看新的编辑。你已经写过它的方式将不起作用,因为你已经调用了'someFunction()'而不是_passing_'someFunction'来''.done'。 – Alnitak 2014-10-08 15:40:53

+0

我明白我做错了什么。谢谢。 – 2014-10-08 15:44:32