8

関数を使用して ajax 呼び出しで値を取得したかったのです。ただし、値は常に未定義として返されます。戻り値は 1 または 0 のみです。

これが私のコードです:

$(function(){ 
   $('#add_product').click(function(){ 
     var i = $('#product_name').val(); 
     param = 'product_name='+i; 
     var value = check_product(param); 
     alert(value); 
     return false; 
   }); 
});

function check_product(param){ 
  $.ajax({ 
    type : 'POST', 
    data : param, 
    url : baseurl+'cart/check_product_name/', 
    success : function(result){ 
      //alert(result); 
      return result; 
    } 
 });
}

私はまだこれを機能させるために取り組んでいます。1 または 0 を示す値を取得しました。今達成しようとしているのは、if ステートメントでどのようにできるかです。こんなものが欲しかった。val = 0 の場合は true を返します。それ以外の場合は false を返します。私は ajax 関数を使用する正しい軌道に乗っているかどうかわかりません。しかし、あなたが私に示すことができるより良い方法があれば、私はそれを感謝します.

$(function(){ 
       $('#add_product').click(function(){ 
         var i = $('#product_name').val(); 
         param = 'product_name='+i; 
         check_product(param).done(function(value) {
        var val = value; //waits until ajax is completed
         });
         if(val == 0){
            return true;
         } else{
            return false;
         }
       }); 
    });

function check_product(param){ 
  return $.ajax({ 
    type : 'POST', 
    data : param, 
    url : baseurl+'cart/check_product_name/'
 });
}
4

2 に答える 2

22

これは非同期であるため、アラートを出す前に ajax 呼び出しがデータを取得するのを待つ必要があります。次のように、ajax 呼び出しを返し、 を使用することで、簡単に行うことができますdone()

$(function() {
    $('#add_product').click(function() {
        var i   = $('#product_name').val(),
            par = 'product_name=' + i;

        check_product(par).done(function(value) {
            alert(value); //waits until ajax is completed
        });

        return false;
    });
});

function check_product(param) {
    return $.ajax({
        type : 'POST',
        data : param,
        url  : baseurl + 'cart/check_product_name/'
    });
}​
于 2012-11-30T16:21:40.093 に答える
1

これを ajax オプションに追加します。

dataType: "json",

と使用

return Json(dataObject, JsonRequestBehavior.AllowGet);

あなたのアクションメソッドで。

君の

return result;

ajax の成功ハンドラーでは、 の戻り値ではありませんcheck_product。別の関数 (おそらく匿名) を渡しcheck_productて、ajax の成功を呼び出します。

于 2012-11-30T16:24:24.993 に答える