2012-11-30 9 views
6

私は関数を使ってajax呼び出しの値を取得したかったのです。値は常に未定義として返されます。戻り値は、ここでの唯一の1または0ajax呼び出しから戻り値を取得する方法は?

である私のコードです:

$(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つの作業を得ることに取り組んでいます。私は現在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/' 
}); 
} 
+3

'ajax'の 'aj​​ax'は非同期を表します:)成功ハンドラの結果に依存するアクションを実行する必要があります –

+0

PHP /スクリプトも提供できますか?また、PHP /スクリプトが実際に渡している変数を取得していることを確認しましたか? –

+0

リクエストには 'async:false'もあります。私はそれを使用しません:p –

答えて

20

これは非同期なので、アラートを送信する前にデータを取得するまで待つ必要があります。

dataType: "json", 

とあなたのアクションメソッドに

return Json(dataObject, JsonRequestBehavior.AllowGet); 

を使用します。

$(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/' 
    }); 
}​ 
+0

defferedオブジェクト、+1を返すことは決して考えませんでした。通常、私はコールバックを渡すだけです。 –

+1

@JanDvorak - ありがとう、常にコールバックを自分で使用するのに使用されていましたが、遅延オブジェクトを返すだけで完了、失敗、そして常に直接的になり、私の意見ではもっと簡単になりました。 – adeneo

+0

@adeneoそれはかなりクールです、ありがとう!別の解決方法は –

1

は、AJAXのオプションにこれを追加:あなたはそうのように、AJAX呼び出しを返すとdone()を使用して簡単にそれを行うことができます。 AJAXの成功ハンドラで

あなた

return result; 

check_productのリターンではありません。別の関数(おそらく匿名)をcheck_productに渡し、ajaxの成功を呼びます。

関連する問題