2

複数の $.get 関数をいくつかの異なる php スクリプトに対して実行する必要がありますが、1 つの汎用関数ですべてを実行してデータを返すだけでよいかどうか疑問に思っていました。私の計画は次のようなことをすることでした:

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 を一度に 1 つずつ実行する必要がありますか?

4

2 に答える 2

1

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);
}

これは例外などを処理しないため、悪い例です。しかし、提供される柔軟性についてのアイデアが得られるはずです。重要なのは、関数が言語の構成要素であり、言語に力を与えるものであることを覚えておくことです。

使用している方法を本当に使い続けたい場合は(お勧めしません)、関数を1つ追加できます... (実際にはお勧めしません)

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});
}

これを行うと、通話結果に基づいてエクスペリエンスの処理方法を変更する機能が失われます。おそらく、呼び出しが完了してデータが入力されるまで選択ボックスを無効にしたい場合や、呼び出しが失敗したときに何か特別なことを実行したい場合があります。関数を使用することはより良いアプローチです。

お役に立てれば。

于 2013-02-19T23:01:18.250 に答える
1

jquery 1.5 を使用している場合、$.getjqXhrはpromise インターフェイスを実装するオブジェクトを返します。

jQuery 1.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
});
于 2013-02-19T22:15:44.617 に答える