我创建了一个jQuery插件,用于在页面上创建html,其中包含从webservice调用中读取的xml。作为备份,如果webservice调用失败,则存储在var中的默认xml用于构建html。现在,我无法使用Web服务,因此我无法使用虚拟xml测试故障情况。我写了所有内容并使用$ .ajax调用排除,当我在我的代码中包含$ .ajax调用webservice时,它仍然正常工作,但链接已被破坏。
我知道“返回这个;”,我已经实现了$ .when()。then()包装我的$ .ajax调用来处理ajax调用的异步性质可能引入的任何问题,但是链接仍然不起作用。 firebug控制台总是告诉我,当我到达链中的下一个方法时,我的方法返回是未定义的,这让我相信我实际上根本不会返回“this”,即使它看起来像我一样。我的代码如下(用伪代码替换了很多以节省时间):
(function( $ ) {
$.fn.createHtmlFromWS = function( options ) {
var $this = $(this);
//function to output the parsed xml as HTML appended to the jQuery object the plugin was called on
function buildNav(dispXml){
//logic to append xml to $this as custom html goes here
return $this;
}
//fallback xml if webservice call fails
var failXml = '<?xml version="1.0" encoding="utf-8"?><hello><world>earth</world></hello>';
//dummy service url to force webservice fail scenario
var serviceUrl = 'http://1234lkjasdf/test';
//Note: this call that does not attempt $.ajax call to webservice WORKS with chaining
//return buildNav($.parseXML(failXml));
//call to webservice
$.when($.ajax({
type: 'GET',
dataType: 'xml',
url: serviceUrl,
timeout: 10,
})).then(function(a1) { //function to call if succeeded
return buildNav($.parseXML(a1[2].responseXml));
}, function(){ //function to call if failed
console.log("in the error part of then"); //Note: this is output to log, I know i'm in the right spot
//This line does not seem to be returning $then which is required for chaining, although it is building the html as expected
return buildNav($.parseXML(failXml));
});
};
}) ( jQuery );
答案 0 :(得分:1)
这是因为您从回调函数返回,而不是函数本身。当您的AJAX请求完成时,您的原始函数早已返回undefined
。
在你的AJAX调用之后,就在函数结束之前,你可能想要return $this;