52

ajaxの使用に問題があります。

ajax からのすべての結果を外部変数に割り当てるにはどうすればよいですか?

私はそれをグーグルで検索し、このコードを見つけました..

var return_first = (function () {
    var tmp = null;
    $.ajax({
        'async': false,
        'type': "POST",
        'global': false,
        'dataType': 'html',
        'url': "ajax.php?first",
        'data': { 'request': "", 'target': arrange_url, 'method': method_target },
        'success': function (data) {
            tmp = data;
        }
    });
    return tmp;
});

しかし、私にはうまくいきません..

そのコードのどこが悪いのか誰にもわかりますか?

4

7 に答える 7

66

後にカンマがありません

'data': { 'request': "", 'target': 'arrange_url', 'method': 'method_target' }

また、無名関数の結果を保持したい場合はreturn_first、関数呼び出しを行う必要があります。

var return_first = function () {
    var tmp = null;
    $.ajax({
        'async': false,
        'type': "POST",
        'global': false,
        'dataType': 'html',
        'url': "ajax.php?first",
        'data': { 'request': "", 'target': 'arrange_url', 'method': 'method_target' },
        'success': function (data) {
            tmp = data;
        }
    });
    return tmp;
}();

最後にメモ()

于 2013-05-29T04:11:56.223 に答える
43

これはあなたがする必要があるすべてです:

var myVariable;

$.ajax({
    'async': false,
    'type': "POST",
    'global': false,
    'dataType': 'html',
    'url': "ajax.php?first",
    'data': { 'request': "", 'target': 'arrange_url', 'method': 'method_target' },
    'success': function (data) {
        myVariable = data;
    }
});

注:「async」の使用は廃止されました。https://xhr.spec.whatwg.org/を参照してください。

于 2013-05-29T04:12:14.533 に答える
30

非同期コードを防ぐために'async': falseを使用することは悪い習慣です。

メイン スレッドでの同期 XMLHttpRequest は、エンド ユーザーのエクスペリエンスに悪影響を与えるため、推奨されていません。https://xhr.spec.whatwg.org/

他の回答が示すように、データを変数に入れるため、表面上は async を false に設定すると多くの問題が修正されます。ただし、投稿データが返されるのを待っている間 (データベース呼び出しや接続が遅いなどの理由で数秒かかる場合があります)、Javascript の残りの機能 (トリガーされたイベント、Javascript で処理されたボタン、JQuery トランジション (アコーディオン、またはオートコンプリート (JQuery UI)) は、応答が保留されている間は実行できません (サイトが基本的に凍結されているため、応答が返ってこない場合は非常に悪いことです)。

代わりにこれを試してください。

var return_first;
function callback(response) {
  return_first = response;
  //use return_first variable here
}

$.ajax({
  'type': "POST",
  'global': false,
  'dataType': 'html',
  'url': "ajax.php?first",
  'data': { 'request': "", 'target': arrange_url, 'method': method_target },
  'success': function(data){
       callback(data);
  },
});
于 2017-04-14T01:40:29.277 に答える
0

以前の回答を少し変更しましたが、この解決策は私のために働いています。

function searchlipcutforbrace(cs,id_pff,wt,ofl){
    var params = {
       "cs"  : cs,
       "id"  : id_pff,
       "wt"  : wt,
       "ofl"  : ofl
       }
       
var response = $.ajax({
                    data:  params,
                    url:   'ajax/searchlipcutforbrace.php',
                    async: false,
                    dataType: 'json',
                    success: function (json) {
                        response = json;
                    },
                    type:  'post'
                });    
    return response.responseJSON;
}
于 2021-09-23T07:57:59.947 に答える