Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从嵌套的$.get返回值_Javascript_Jquery_Nested Function - Fatal编程技术网

Javascript 从嵌套的$.get返回值

Javascript 从嵌套的$.get返回值,javascript,jquery,nested-function,Javascript,Jquery,Nested Function,我需要在几个不同的php脚本中运行多个$.get函数,我想知道是否可以在一个通用函数中完成所有操作,然后返回数据。我的计划是这样做: var companyName = 'Google'; var customers = get('Customers', companyName); var vendors = get('Vendors', companyName); function get(table, variable){ $.get('http://www.mysite.com

我需要在几个不同的php脚本中运行多个$.get函数,我想知道是否可以在一个通用函数中完成所有操作,然后返回数据。我的计划是这样做:

var companyName = 'Google';

var customers = get('Customers', companyName);
var vendors = get('Vendors', companyName);

function get(table, variable){
    $.get('http://www.mysite.com/phps/get'+table+'.php', {company: variable}, function(data){return data});
}

但是,这不起作用,因为它位于嵌套函数中。这是可能的(很容易),还是我必须一次执行$.get一个?

如果使用jquery 1.5,将返回一个
jqXhr
对象,该对象实现promise接口:

从jQuery1.5开始,jQuery的所有Ajax方法都返回XMLHTTPRequest对象的超集。$.get()返回的这个jQuery XHR对象或“jqXHR”实现了Promise接口,为它提供了Promise的所有属性、方法和行为

可以这样使用:

function yourMultipleGetFunction(success, error) {

    var jqXhr1 = $.get('url', data);
    var jqXhr2 = $.get('url2', data2);

    $.when(jqXhr1, jqXhr2).then(success, error);
}

yourMultipleGetFunction(function(data1, data2){
     //handle the objects returned from the get requests
}, function(jqXHR, textStatus, errorThrown){
    //something went wrong, handle the error here
});

请记住,在Javascript中,函数是一等公民,因此与其返回值,不如发送函数:

var companyName = 'Google';

var customers, vendors;

get('Customers', companyName, function(data) { customers = data; });
get('Vendors', companyName, function(data) { vendors = data; });

function get(table, variable, success){
    $.get('http://www.mysite.com/phps/get'+table+'.php', {company: variable}, success);
}
这是一个糟糕的例子,因为它不处理异常等,但它应该让您了解提供给您的灵活性。关键是要记住函数是语言的组成部分,是什么赋予了它力量

如果你真的想坚持你正在使用的方法(我不推荐),你可以添加一个额外的函数(我真的不推荐)

var companyName = 'Google';

var customers, vendors;

get('Customers', companyName, customers);
get('Vendors', companyName, vendors);

function get(table, variable, results){
    $.get('http://www.mysite.com/phps/get'+table+'.php', {company: variable}, function(data){ results = data});
}
这样做会导致您无法根据通话结果更改处理体验的方式。您可能希望在调用完成并填充之前禁用选择框,或者希望在调用失败时执行一些特殊操作。使用函数是更好的方法


希望这有帮助。

异步代码要求您将代码带到结果中,而不是将结果返回到代码中。您认为它不起作用是什么意思?您的控制台中显示了一些javascript错误<代码>$。是否定义了get()?引用麦克·布兰特的话:“你说它不起作用是什么意思?”我不确定这对我是否有效。我展示的代码非常简单。实际上,我有大约40个不同的函数,它们需要使用相同的get函数,将几个变量传递到该函数中。目前,每个函数都有自己的get,我只是想知道是否有一个get函数更容易让所有函数都能使用。看起来这样做需要做更多的工作。@TylerMortensen如果你没有测试它是否有效,你怎么能说它不起作用?如
函数get(表,变量){…}所示
可能会起作用,但这取决于你开始意识到什么;当它们全部实现时(你会知道使用
$。当@Johan指出
),你可以继续你的应用程序逻辑。这非常有效!正是我想要的。谢谢。你的第二个例子没有什么意义。JavaScript没有可以取消引用的指针,因此当您传递
客户
供应商
时,实际上只是传递当前值
未定义
。回调中的赋值发生在本地
results
变量(参数)上。第一个例子稍微好一点,但仍然不是人们会做的事情,因为对这些变量的赋值可能会在本地代码尝试使用这些变量很久之后发生。如果您的回调只是直接使用
数据
而不是执行赋值,则会更清楚。