1

我正在尝试使用我粘贴的这个函数从我的 node.js 服务器的一系列跨域 url 中获取 html 代码。如果我异步执行此操作,我将成功获取所需的 html;但是,我很难让这个功能之外的所有其他事情正常工作。正如我现在所拥有的那样,同步执行此操作会使该函数之外的所有内容按应有的方式工作,但是我的 ajax 调用都没有成功,并且 this.url 未定义。

我正在使用 jquery 节点模块来执行此操作。

这是在控制台中记录的错误:[TypeError: Cannot read property 'headers' of undefined]

任何帮助将不胜感激。

function myFunction( catname, myurl ){

var htmlresult="";

  $.ajax({
    type: "GET",
    url : "http://"+myurl,
    dataType: 'html',
    context: this,
    async: false,
    cache: false,
    error: function(xhr, status, ethrown){
      console.log("THERE WAS AN ERROR");
      console.log(this.url);
      console.log(catname);
      console.log(status);
      console.log(ethrown);

      htmlresult = myurl;
    },
    success : function(result){
      console.log(this.url);
      console.log("SUCCESS");
      console.log(catname);
      //console.log(result);

      htmlresult = result;
    }
})

return htmlresult;
}

感谢您抽出时间来阅读。

4

1 回答 1

0

在这种情况下,您不应该真正使用同步请求模式来完成您的工作。如果您正在使用 node 并希望以同步方式执行某些工作,则应使用 promise/defered 概念。请参阅下面的示例

var Deferred = require("promised-io/promise").Deferred;
var def = new Deferred();

request(this.getUrl("statusObject"), function(err, resp, body) {
    if(!err){
        def.resolve(body);
    }
}

def.promise.then(function(val){
    //Do something.
});
于 2014-02-17T17:46:16.080 回答