2011-06-13 3 views
1

다음 함수가 작동하지 않는 이유를 잘 모릅니다. 누군가 빛을 발할 수 있기를 바랍니다.jQuery로 ajax 함수 호출 후 전역 변수 업데이트

데이터베이스의 특정 ID를 나타내는 글로벌 매개 변수가 있습니다. 이제 db가 업데이트되어야하는지 또는 항목에 대해 새로운 항목을 만들어야하는지 확인하기 위해 변수가 설정된 경우 ajax 호출을하기 전에 확인합니다. 변수가 설정되어 있다면 db로 삽입해야한다는 것을 알지 못하면 db를 업데이트해야한다는 것을 알고 있습니다. 그런 다음 서버 측에서 삽입의 경우 새로 생성 된 ID를 반환하거나 업데이트의 경우 이전 ID 만 반환합니다. jQuery 폼을 사용하여 플러그인을 유효성을 검사합니다 (따라서 함수 호출 ajaxSubmit()). 그러나 submitHandler의 success 함수에서 할당이 작동하지 않는 것 같습니다 (data.poiId가 의심되는 결과를 반환하는지 확인했습니다).

$(document).ready(function() { 

    // Function which examines window.location.href and extracts a numerical id if there is one specified in the query 
    var id = getParameter('poiId') 

    ... 

    }, 
    submitHandler : function(form) { 
     var str = 'submitPOI.php'; 
     if (id.length > 0) str += '?poiId=' + id; 

     $(form).ajaxSubmit({ 
      url : str, 
      type : 'POST', 
      dataType : 'json', 
      success : function(data) { 
       id = data.poiId  // Update POI id with response from server 
      } 
     }); 
    } 

    ... 
}); 
+0

디버거에서 "id = data.poiId"가 표시되는지 확인 했습니까 (정의되지 않습니까)? –

+0

AJAX가 반환되기 전에 계속 될 수 있습니다. 일단 AJAX 호출이 이루어지면 코드는 계속하기 전에 반환 할 때까지 기다리지 않습니다. 이드와 뭘 하려니? –

+0

사용자가 처음 제출 한 직후에 양식을 다시 제출할 때 (첫 번째 제출 ID가 아직 가치가 없음) 다른 양식이 작성되는 것을 방지합니다. 두 번째 제출은 성공 함수가 호출 된 후에도 잘 수행되지만 타이밍 문제 일 수 있다고 생각합니다. – MJD

답변

4

id 변수는 $ (document) .ready() 함수에서 선언되었으므로 전역 변수가 아닙니다. 함수 외부로 이동하여 작동하는지 확인하십시오.

+0

와우! 내가 얼마나 어리 석 었는지 지적 해 주셔서 고마워요. 예상대로 작동합니다. – MJD

관련 문제