【问题标题】:Writing jQuery inside a Javascript function not working在 Javascript 函数中编写 jQuery 不起作用
【发布时间】:2018-03-19 14:27:31
【问题描述】:

我有一个名为 example.js 的 js 文件,其中一行如下:

gridOptions.api.setRowData(createRowData());

然后还有另一个文件data.js,它有createRowData() 函数,应该返回ROW_DATA。如下:

function createRowData() {
    jQuery.getJSON('/file.txt',function(ROW_DATA){

    return ROW_DATA;

    });

}

但是,每当从example.js 文件中调用此createRowData() 函数时,它不会进入jQuery 块,而只是进入最后一个大括号。谁能告诉我这里出了什么问题?

【问题讨论】:

  • jQuery.getJSON 是异步的。
  • 当你说“它没有进入 jQuery 块内部,只是来到最后一个大括号。”你是什么意思?
  • 我会在setRowData 之前尝试exec ajax 调用getJSON .. 先获取数据,然后将其填充到网格中:)
  • @Dream_Cap 即不进入执行语句 return ROW_DATA;我如何返回这个值??
  • 我不知道这个代码示例的目的是什么,但就目前而言,我可以看到一些困难。 gridOptions.api.setRowData(createRowData()); 语句似乎使用了createRowData() 函数的result。然而,作为一个 Ajax 调用,还不会有结果,你将得到的只是undefined,因为函数本身不返回任何内容。如果您一无所获,那正是您所要求的。

标签: javascript jquery html ag-grid


【解决方案1】:

我相信您没有获得价值,因为 getJSON 正如其他人所说的那样是异步的。 createRowData 在稍后而不是在调用它时检索该值。

这是通过 Promise 获取数据的一种方法。我评论了下面发生的事情:

function createRowData() {
    //return a new promise
    return new Promise(function(resolve, reject){

    jQuery.getJSON('/file.txt',function(ROW_DATA){
     //on reject, send an error
     if (ROW_DATA === null) reject("Error fetching data");
    //on resolve, send the row data
    return resolve(ROW_DATA);

    });
});
}
//use then to describe what happens after the ajax request is done
gridOptions.api.setRowData(createRowData()).then(function(rowdata){
return rowdata; //log data or error
})

编辑:做一个同步的ajax请求,你也许可以做这样的事情,参考这个SO question

function createRowData() {

    $.ajax({
    url: "/file.txt'",
    async: false,
    success: function(rowdata){
    return rowdata
    }
})

}

要像您提到的那样将一些数据读取到变量中,nodejs 可能会有所帮助,因为它可以处理读取输入/输出,并且可能还可以读取变量。:

【讨论】:

  • 谢谢,但它也是异步的,我在其他进一步使用结果的行中未定义。有什么方法可以将文件同步读取到 javascript 变量中?
  • 我收到 UncaughtReferenceError: data is not defined。上线数据:data :O
  • 我删除了行数据:数据并且错误消失了。因此,我到达返回行数据行并在开发人员工具中将鼠标悬停在它上面,我也可以看到数据,但它仍然从函数 createRowData() 返回此数据,即,如果我尝试控制台记录此数据在调用这个 createRowData() 函数的地方,它给出“未定义”
  • 嗯,我现在也很困惑。我删除了数据:数据。
【解决方案2】:

您从文件中获取 JSON,将结果传递给回调函数,然后返回。退回哪里??

正如我所说,您的匿名函数是一个回调

程序说:当你读完文件后,调用这个函数,好吗? 当你这样做时,我正在做其他事情。

这就是它的作用。该程序将继续运行,直到文件被读取,此时您的回调匿名函数将被调用。 你可以这样做。

createRowData(gridOptions.api);
// add code here if you want this code to execute even before you get the response
function createRowData(api) {
    jQuery.getJSON('/file.txt',function(ROW_DATA,api){   
    api.setRowData(ROW_DATA);   
    //Whatever else you want to do. In case you want this to be done only 
    //after the values have been read
    });
}

如果你想等待,等待文件被读取,只是,不要在函数之后做任何事情,而是将它放在回调函数中。

【讨论】:

  • 有什么方法可以在不使用异步 jQuery 或 Ajax 的情况下从文件中获取数据?我不希望程序继续运行,直到文件未完全读取到变量然后返回变量。
猜你喜欢
  • 2019-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-05
  • 1970-01-01
  • 1970-01-01
  • 2019-05-01
相关资源
最近更新 更多