2013-01-21 2 views
0

som 함수를 하나의 함수로 결합하는 데 문제가있었습니다. 나는 직장에서 보여줄 작은 시스템을 만들려고 노력하고있다. 종류가 개선 될 수있는 방법을 보여줍니다. 배포 용이 아닙니다.Javascript 및 JQuery와의 결합 함수

함수는 다음과 같습니다.

// To choose an errand or with a zero start a new errand. 
function buildErrandBox(number) 
{ 
$.ajax({ 
    url: 'db/buildErrandBox.inc.php', 
    type:'POST', 
    dataType: 'json', 
    data: { customerNumber: $("#customerNumber").val(), errandNumber: number }, 
    success: function(build){ $('#newErrandsBoxResult').empty(); $('#newErrandsBoxResult').append(build.buildForm); $('#newErrandsBoxTextResult').empty(); $('#newErrandsBoxTextResult').append(build.buildText); showMinorContent('#newErrands'); $('#errandArea').val(build.area); $('#errandGroup').val(build.group); $('#errandType').val(build.type); escalateOptions(); getEscalationGroups(); }, 
    error: function (xhr, ajaxOptions, thrownError) { alert(xhr.status); alert(thrownError); } 
}); 
} 

// To save changes on a errand. 
function saveErrand() 
{ 
$.ajax({ 
    url: 'db/saveErrandsForCustomer.inc.php', 
    type:'POST', 
    dataType: 'json', 
    data: { id: $("#errandID").val(), 
      telephone: $("#errandTelephoneNumber").val(), 
      email: $("#errandEmail").val(), 
      area: $("#errandArea").val(), 
      group: $("#errandGroup").val(), 
      type: $("#errandType").val() 
    }, 
    success: function(output_string){ showCustomerErrands(); }, 
    error: function (xhr, ajaxOptions, thrownError) { alert(xhr.status); alert(thrownError); } 
}); 
} 

// To save a new note on an errand. 
function saveTextForErrand() 
{ 
$.ajax({ 
    url: 'db/saveErrandsText.inc.php', 
    type:'POST', 
    dataType: 'json', 
    data: { id: $("#errandID").val(), text: $("#newTextForErrandTextArea").val() }, 
    success: function(output_string){ buildErrandBox($("#errandID").val()); }, 
    error: function (xhr, ajaxOptions, thrownError) { alert(xhr.status); alert(thrownError); } 
}); 
} 

다음은 웹 페이지의 버튼을 사용할 때 작동하는 세 가지 개별 기능입니다. 새로운 심부름을 시작하려면 먼저 클릭하십시오. 그것이 어떤 유형의 심부름인지를 변경합니다. 메모를 작성하십시오. 그리고 심부름을 저장하십시오. 모두 잘 작동합니다.

배경에서 빌드 심부름 기능은 입력 상자 전체를 구성하고 심부름을 표시하도록 선택합니다. 그러나 심부름을 저장하는 다음 기능은 심부름 번호를 인식하고 심부름을 데이터베이스에 저장합니다. 내가

아래
function preMadeErrand(area, group, type, text, servicetext) 
{ 
buildErrandBox(0); 
alert($("#errandID").val()); 
$('#errandArea').val(area); 
changeErrandBoxes(); 
$("#errandGroup").val(group); 
changeErrandBoxes(); 
$("#errandType").val(type); 
$("#newTextForErrandTextArea").val(servicetext); 
saveTextForErrand(); 
$("#newTextForErrandTextArea").val(text); 
saveTextForErrand(); 
alert($("#errandID").val()); 

saveErrand(); 
} 

처럼이 결합 할 때

는하지만 errandID는 정의된다. 어떤 아이디어?

업데이트!

기능의 시작 부분에 경고가 표시되면 작동합니다. 상자를 만들기위한 함수가 errandID를 사용하기 전에 완료되지 않은 것 같습니다. 두 번 경고하면 두 번째 경고가 나옵니다.

계속하기 전에 buildErrandBox (0)와 같은 실행을 끝내는 방법이 있습니까?

+3

AJAX의'A'는 비동기를 의미합니다. –

답변

0

비동기 옵션 거짓 로 설정 (또는 타임 아웃).

Documentation

+1

감사합니다,이 내 문제가 해결되었습니다. – Nicklas

+0

도움이 된 것을 기쁘게 생각합니다. –

0

경고 발생시 ajax는 asynchronous입니다. 아약스 함수는 아직 실행되지 않았습니다. ..... 하나의 방법은 당신의 함수를 재정렬하고 다른 사람들에게 호출하는 것입니다. buildErrandBox(0)의 아작스 성공 함수를 호출하면됩니다.이 방법을 사용하면 buildErrandBox() 이후에만 다른 함수가 호출되도록 할 수 있습니다. 가 실행되었습니다.

function buildErrandBox(number) 
{ 
    $.ajax({ 
    url: 'db/buildErrandBox.inc.php', 
    type:'POST', 
    dataType: 'json', 
    data: { customerNumber: $("#customerNumber").val(), errandNumber: number }, 
    success: function(build){ 
       //your stuff.. 
       alert($("#errandID").val()); 
       $('#errandArea').val(area); 
       changeErrandBoxes(); 
       ... 
       saveTextForErrand(); 
       ......... 
       // function you want to execute here 
      }, 
    error: function (xhr, ajaxOptions, thrownError) { 
       //your stuff 
      } 
}); 
} 
-1

당신은 모든 AJAX 호출이 완료 있는지 확인해야합니다 그리고 당신은 더 서버 respones을 처리하기 위해 시도해야합니다.

$.ajax({ 
    url: 'db/buildErrandBox.inc.php', 
    type:'POST', 
    dataType: 'json', 
    async: false, // <-- add this line 
    ... 

블록 다음 명령문의 추가 실행 결과가 반환 한 것입니다 때까지 당신이 AJAX 기능을 계속하기 전에 완료하려면