如何将$ .ajax中的值返回到外部函数?在下面的示例中,我希望getProxySrc()返回streamSrc。此外,我不想在它发生时绑定javascript /页面...但同时,特定的代码块需要xml输出继续。处理这个问题的最佳方法是什么?某种民意调查?
function getProxySrc(xmlSrc){
var streamSrc;
$.ajax({
type: "GET",
url: xmlSrc,
dataType: "xml",
success: function(xml, textStatus) {
$(xml).find('VideoStream').each(function(){
streamSrc = $(this).text();
console.log("Stream found: " + clip);
return streamSrc;
});
}
});
}
答案 0 :(得分:1)
这已经是异步的,因此一旦请求开始,脚本线程就会自由。
不幸的是,由于您没有同步调用堆栈,因此无法返回。您必须让您的成功处理程序使用它接收的值调用流程的下一部分。
查看一些javascript promises库,这些库旨在为您提供更好的方法来描述跨越大量异步调用的工作流。
这个项目适用于MooTools,但自述文件很好地描述了问题的本质以及“承诺”风格解决方案的本质。
答案 1 :(得分:0)
浏览器中的JavaScript是单线程的。例如,您不能异步等待操作完成循环使用。
当请求完成时,您需要让回调函数调用另一个函数(而不是以某种方式“返回”到另一个函数),或者使AJAX请求同步(通过传入async: false
作为请求选项)。
由于您不想阻止,因此将回调作为唯一选项。如果您愿意稍微更改一下设计,可以在getProxySrc
函数中添加第二个参数,该函数是获取proxy-src时要执行的函数:
function getProxySrc(xmlSrc, onProxyObtained) {
$.ajax({
//...
success: function(xml, textStatus) {
// ...
if (onProxyObtained) {
onProxyObtained(theProxy);
}
}
});
}
然后,调用者可以传入一个函数,在结果可用时立即对结果执行任何操作,而不需要轮询。