0

非常に多くの質問を検索しましたが、正しい答えが得られませんでした。私は自分の研究から次の関数を作成しました.ajax呼び出しは非同期であるため、グローバル変数に値を渡してそれを返しますが、空白または未定義の値を取得します.$( '#someid' .html に応答するか、他のいくつかのメソッドを実装しますが、それらを実装したくありません。私がここで間違っていることを考えてください

function SimpleAjax(form, postData, url)
{
    var returnData;
    var sendData;

    if (form == "") {
        sendData = postData;
    }
    else if (postData == "") {
        sendData = $(form).serialize();

    }

    $.ajax({
        type: 'POST',
        url: url,
        cache: false,
        data: sendData,
        success: function(data)
        {
            if (data != null || typeof data != 'undefined') {
                returnData = data;
            }
        }
    }).done(function(data) {
        returnData = data;
    });

    return returnData;
}​
4

2 に答える 2

4

問題はreturn returnData;、成功または完了関数が実行される前に発生することです。おっしゃる通り、非同期です。ただし、関数 SimpleAjax は同期的に実行されています。

したがって、Ajax 呼び出しを開始し$.ajax({ ... });return returnData;.

私がしているのは、グローバルを使用していないため、頭痛の種になるだけです。ただし、結果を返そうとするのではなく、成功時に実行する関数を渡します。

何かのようなもの...

function SimpleAjax(form, postData, url, successCallback)
{
    var returnData;
    var sendData;

    if (form == "") {
        sendData = postData;
    }
    else if (postData == "") {
        sendData = $(form).serialize();

    }

    $.ajax({
        type: 'POST',
        url: url,
        cache: false,
        data: sendData,
        success: successCallback
    });
}​

//TODO: set your input parameters
SimpleAjax(form, postdata, url, function(data) {
    alert(data);
});
于 2012-09-06T14:10:12.507 に答える
0

答えも見つかりました.doneは魔法を行い、ajaxが完了した後に値を返すと思いましたが、そうではありませんでした....このコードを async: false,

ajaxで動作します

   function SimpleAjax(form,postData,url)

    {

    var returnData;
   var sendData;
 if (form == "")
  {
    sendData=postData;  
  }
  else if(postData=="")
  {
    sendData=$(form).serialize();     

  }





        $.ajax({
    type:'POST',
    url: url,
    cache: false,
    data:sendData ,
   async: false, 
    success: function(data)                

    {
    if (data != null || typeof data!='undefined')   
    {  
    returnData= data;


    }

    } 



    });


    return returnData;


      }
于 2012-09-06T14:12:14.920 に答える