2012-11-30 4 views
6

함수를 사용하여 아약스 호출의 값을 가져오고 싶었습니다. 값은 항상 정의되지 않은 값으로 반환됩니다. 반환 값은 여기에만 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/' 
}); 
} 
+3

'ajax'의 'ajax'는 비동기식이므로 ... :) 성공 처리기의 결과에 의존하는 작업을 수행해야합니다. –

+0

PHP/스크립트도 제공 할 수 있습니까? 또한 PHP/스크립트가 실제로 전달하는 변수를 얻고 있는지 확인 했습니까? –

+0

또한 요청에 대해 'async : false'가 있습니다. 나는 그것을 사용하지 않을 것이다 : p –

답변

20

비동기식이므로 경고를하기 전에 데이터를 다시 수신하기 위해 ajax 호출을 기다려야합니다.

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 호출을 반환하고 done()를 사용하여 쉽게 그렇게 할 수 . 아약스의 성공 처리기에 대한 여러분의

return result; 

check_product에 대한 반환하지 않습니다. 다른 함수 (익명 일 수도 있음)를 check_product으로 전달하고 아약스 성공을 요청하십시오.

관련 문제