javascript:在函数完成处理之前执行函数的顺序-嵌套函数返回值?
我只是在学习JavaScript,对于像我这样的人来说,它异步处理函数的方式似乎有很多信息 虽然我仍在努力想办法解决这个问题,但我发现自己正在努力解决一些sharepoint csom问题。也许我完全错了,但正如我所说,我只是在学习 尝试使用SP CSOM获取如下列表数据:javascript:在函数完成处理之前执行函数的顺序-嵌套函数返回值?,javascript,jquery,function,asynchronous,Javascript,Jquery,Function,Asynchronous,我只是在学习JavaScript,对于像我这样的人来说,它异步处理函数的方式似乎有很多信息 虽然我仍在努力想办法解决这个问题,但我发现自己正在努力解决一些sharepoint csom问题。也许我完全错了,但正如我所说,我只是在学习 尝试使用SP CSOM获取如下列表数据: getGridData() { var gridURL = "https://mySite/ListData.svc/Projects"; var request = new Sys.Net.WebReque
getGridData() {
var gridURL = "https://mySite/ListData.svc/Projects";
var request = new Sys.Net.WebRequest();
request.set_httpVerb("GET");
request.set_url(gridURL);
request.get_headers()["Accept"] = "application/json";
request.add_completed(onCompletedProjectCallback);
request.invoke();
}
onCompletedProjectCallback(response, eventArgs) {
var getProject = eval("(" + response.get_responseData() + ")");
var buildMarkUp = '';
for (var i = 0; i < getProject.d.results.length; i++) {
buildMarkUp += "<div>" + getProject.d.results[i].ProjectName + "</div>";
}
}
这是我真正挣扎的地方
一个单独的回调意味着如果我返回正确,它不会返回到包含数据的原始函数?原始函数是否继续处理,并仅触发嵌套函数?
我如何控制何时/如何/哪些值返回到原始函数?我可以吗 基本上,如果我试图构建一个表,其中每个引用的项目行都包含来自其他sharepoint列表的数据,并且我需要控制要附加到DOM的字符串的生成顺序,该怎么办 一个单独的回调意味着如果我返回正确的话,它不会返回到包含数据的原始函数 对
return
从执行的函数返回,但不等待ajax加载事件及其处理程序获取数据
原始函数是否继续处理,并仅触发嵌套函数
对。它启动一组ajax请求,并为每个请求返回未定义的
我如何控制何时/如何/哪些值返回到原始函数?我可以吗
您将需要使用回调,您永远不会“返回”值。执行web请求的函数会立即继续,并且无法从该调用返回数据,这是正确的。您需要对回调进行编码,以便将它们收集的数据添加到公共数据结构中——可能需要创建一个对象,将数据累积为新属性。收集完所有数据后,最后一次回调可以构建HTML元素。如果您同时执行多个AJAX请求,那么每个回调都可以调用一个公共函数来查看是否所有请求都已完成。例如:
function checkLoadingComplete() {
if (loadedData.project && loadedData.relatedData && loadedData.summaryData) {
//now build the HTML elements
}
}
var getProject=eval(“+response.get_responseData()+”)你到底在那里干什么?@Cerbrus:他试图解析JSON@操作:使用JSON.parse
@Bergi..尝试按照您的建议进行操作,但以上是我从中学到的方法,我很难找到如何将JOSN.parse与此结合使用,而不是上面的.nm。这实际上非常简单…我的错误谢谢。显然,我只需要了解更多关于回调的信息。非常感谢。@Justin:还可以查看延迟/承诺,这为您提供了一个更优越的界面callbacks@Bergi当前位置我将……感谢您的帮助/指导。
function checkLoadingComplete() {
if (loadedData.project && loadedData.relatedData && loadedData.summaryData) {
//now build the HTML elements
}
}