2010-04-08 12 views
5

ajax 콜백 함수에서 ColdFusion 함수에서 여러 값을 반환해야합니다. 여기에 내가있어 무엇 :함수에서 둘 이상의 값 반환

$('input[name="StateName"]').live('change', function() { 
    var StateID = $(this).parents('tr').attr('id'); 
    var StateName = $(this).val(); 
    $.ajax({ 
     url: 'Remote/State.cfc' 
     ,type: "POST" 
     ,data: { 
      'method': 'UpdateStateName' 
      ,'StateID': StateID 
      ,'StateName': StateName 
     } 
     ,success: function(result){ 
      if (isNaN(result)) { 
       $('#msg').text(result).addClass('err'); 
      } else { 
       $('#' + result + ' input[name="StateName"]').addClass('changed'); 
      }; 
     } 
     ,error: function(msg){ 
      $('#msg').text('Connection error').addClass('err'); 
     } 
    }); 
}); 

내가 트랩 데이터베이스 오류 경우 성공 콜백 해고되고, 결과가 숫자가 아님 (그것은 사실입니다, 오류 메시지의 텍스트). 다른 값을 다시 전달하는 함수가 필요합니다. 하나는 오류를 일으킨 행의 기본 키일 수 있습니다. 또 다른 하나는 이전 StateName 일 수 있으므로 클라이언트가 변경 사항이 적용되지 않았 음을 절대적으로 알 수 있도록 화면에서 이전 값을 새로 고칠 수 있습니다.

나는 여기에서 원 자성의 규칙을 어 기고 수정해야한다고 생각하는데, 결과가 업데이트 된 행의 기본 키로 사용되거나 업데이트가 실패하면 오류 메시지가 표시되기 때문에 수정해야합니다. 기본 키와 오류 메시지를 모두 반환해야합니다.

답변

6

귀하의 원격 기능이 **JSON 문자열 **를 반환 할 수 개체를 포함하는, 내가 생각 :하지만 위의 객체를 사용하는 것은, 당신의 "성공"기능처럼 더욱 보인다.

단일 '값'내에 여러 개의 값을 가질 수 있습니다.

JSON은 Javascript Object Notation이므로 Javascript로 읽기 쉽습니다. JSON에 많은 언어로 데이터를 직렬화하는 라이브러리가 있습니다.

{"status":1,"message":"this is a message","data":{"test":"plop","hello":"world"}} 

이 3 개 속성 오브젝트에 대응 :


여기 JSON 문자열이다

  • status
  • message
  • data; 두 개의 속성이 포함 된 자체 개체입니다.

AJax 호출에서 이러한 종류의 문자열을 반환하는 것은 너무 어렵지 않아야합니다. 이것은 매우 유연하고 매우 신실한 시스템입니다.

+0

감사 파스칼 마틴있는을위한! 좋아요, 결과를 { "STATEID": 101.0, "MSG": "Hello World"}로 변경했습니다. 이제 result.msg를 어떻게 처리합니까? 그게 결과 야 .DATA.msg 아니면 뭐야? –

+0

당신을 환영합니다 :-) jQuery를 사용하면서 http://api.jquery.com/jQuery.ajax/를 살펴보십시오. 'dataType' 옵션은'json'으로 설정할 수 있기 때문에 흥미 롭습니다; 그리고 나서,'success' 콜백은 Javascript 객체를 직접 받아야합니다; 'result.STATEID','result.MSG', ... –

+0

그래, 난 result.MSG를 사용해야했을 때 result.msg를 사용했다. Arg! 대소 문자를 구별하는 컴퓨터 언어를 합리화 한 사람은 누구입니까? 그들은 모두 1과 0이라는 것을 모릅니다! –

4

내 모든 아약스 요청을 동일한 개체 유형을 반환합니다. 내가 사용하는 패턴은 매우 일반적인 패턴입니다. 응답 객체는 항상 Success 플래그, Data 속성 및 Errors 컬렉션으로 구성됩니다.

그런 객체를 jsonify하고 모든 Ajax 요청에 대해 반환하면 요청이 성공했는지, 어떤 오류 (있는 경우)가 있었는지, 항상 성공했는지를 확인할 수 있습니다. 결과 데이터. 이런 식으로 일관된 방식으로 응답을 처리 할 수 ​​있습니다.

Errors 콜렉션은 비즈니스 로직 오류 일 수 있습니다. 실제 서버 오류는 여전히 jQuery 실패 핸들러를 트리거합니다.

if (!result.Success) { 
    $('#msg').text(result.Errors[0]).addClass('err'); 
} else { 
    $('#' + result.Data + ' input[name="StateName"]').addClass('changed'); 
}; 
+0

일을 일관된 규칙 – Antony

1

당신은 XML 문자열을 반환하고 성공 기능에 액세스 할 수 있습니다

success:function(data) 
{ 
    var err_code,err_msg; 
    //read err_code and err_msg: 
    // we need 2 different handlers for IE and all other browsers. 
      if (! $.browser.msie) 
      { 
       // this code surprisingly doesn't work with IE. 
       err_code = $('error_code:first',data).text(); 
       err_msg = $('error_message:first',data).text(); 
      } 
      else 
      { 
       var xml = new ActiveXObject("Microsoft.XMLDOM"); 
       xml.async = false; 
       xml.loadXML(data); 
       err_code = xml.documentElement.getElementsByTagName('error_code')[0].text;      
       err_msg = xml.documentElement.getElementsByTagName('error_message')[0].text; 
      } 

} 
관련 문제