2011-02-28 4 views
0

저는 PHP와 JavaScript로 작은 캘린더 앱을 만들고 있습니다.완료하기 전에 외부 방법이 완료 될 때까지 기다리시겠습니까?

매우 간단
function populateEvents() { 

    $.ajax({ 
     type: "GET", 
     url: "populateEvents.php", 
     success: function(data, textStatus, XMLHttpRequest) { 
      $('#events').html(data); 
     }, 
     error: function(jqXHR, textStatus, errorThrown) { 
      alert("Status: " + textStatus + ". Error thrown: " + errorThrown); 
     } 
    }); 
} 

, populateEvents.php는 대부분의 작업을 수행합니다 첫 페이지에 이벤트를 div를 채우려면,이 기능을 실행합니다. 내가 이벤트를 추가 할 때

지금, 나는 다음과 같은 함수를 호출 :

function createEvent(u_id) { 
    var title = $("#titleInput").val(); 
    var type = $("#typeSelect").val(); 
    var location = $("#locationInput").val(); 
    var date = $("#inputDate").val(); 
    var time = $("#inputTime").val(); 
    var allday = $('#allDaySelect:checked').val() !== undefined ? '1' : '0'; 
    var duedate = type == 'todo' ? date : ''; 
    var notes = $("#inputNotes").val(); 
    var output = 'u_id=' + u_id + '&title=' + title + '&type=' + type + '&location=' + location + '&date=' + date + '&time=' + time + '&allday=' + allday + '&duedate=' + duedate + '&notes=' + notes; 


    $.ajax({ 
     type: "GET", 
     url: "addEvent.php", 
     data: output, 
     success: function(data, textStatus, XMLHttpRequest) { 
      if (data == '') { 
       toggleNewEvent(); 
       populateEvents(); 
      } else { 
       // extract form problems from formProblems, in form: title=empty&date=empty&... 

       var errorArray = data.split("&"); 
       var fields = ''; 
       $.each(errorArray, function(index, value) { 
        var field; 
        var smallArray = value.split("="); 
        field = smallArray[0]; 
        fields = fields + field + ', '; 
       }); 
       alert('You must fill in the following fields: ' + fields); 
      } 
     }, 
     error: function(jqXHR, textStatus, errorThrown) { 
      alert("Status: " + textStatus + ". Error thrown: " + errorThrown); 
     } 
    }); 
} 

좀 더 복잡하지만, 난 당신이 요점을 얻을 확신합니다. 값을 addEvent.php으로 보내고 구문 분석 된 결과 문자열을 구문 분석하여 반환합니다. 이제 전체 PHP 측면을 재구성하여 eventlist 클래스와 이벤트 클래스를 구현했습니다. 이전에는 addevent.php 파일은 모든 실제 백엔드 작업을했지만 지금은 (일부 확인 후) 해당 파일이 아래로 비등 : 그러나, 자바 스크립트 함수에이 파일 수익률이이 것을 전송있어 그 결과

if ($return == '') { 
     /*If return is empty, everything is fine, carry on.*/ 
     $eventlist->addEvent($u_id, $title, $type, $date, $time, $allday, $location, $dueby, $notes); 
    } else { 
     /*Throw an error*/ 
     echo ($return); 
    } 

addEvent 메서드를 실행하려면 eventlist 개체에 요청하십시오. 그런 다음 함수는 즉시 이벤트 div를 채우려고 시도하므로 결과적으로 addEvent 메서드가 완료되지 않았으므로 작동하지 않습니다. 그러나 페이지를 새로 고칠 때 올바르게 작동하므로 제대로 삽입했다는 것을 알기 때문에 두 번째 PHP 파일이 끝날 때까지 기다려야합니다.

+0

제발 .. ** '데이터'매개 변수 **로 문자열을 사용하지 마십시오. 탈출에 신경 쓰지 않아도되는 것을 피할 수있는 객체를 전달할 수 있습니다. – ThiefMaster

+0

javascript와 php간에 객체를 전달하는 방법은 무엇입니까? –

+0

그는'output' 변수가 json 객체 여야 함을 의미합니다. jquery는 텍스트를 이스케이프 처리하고 적절한 데이터를 전달합니다. '{u_id ': 1,'title ':'이것은 내 제목 '}' – Val

답변

1

$eventlist->addEvent($u_id, $title, $type....... 부분을 스크립트로 반환하지 않은 이유는 echo $eventlist->addEvent($u_id, $title, $type.......입니다.

그런 다음 addEvent 메서드에서 이벤트 ID를 반환합니다. 그런 다음

대신 페이지를 확인, 당신은 (if (!isNaN(data)) isNotANumber)의 ID 공백 확인되어있다, 그래서 당신은 당신이이를 가질 때까지 반환하지 것입니다 귀하의 페이지와 이벤트를 삽입 완료 알고 신분증.

+0

이것이 좋은 결과를 얻을 수 있다면 좋은 생각입니다. addEvent.php에서 다음과 같은 오류가 나타납니다. /home/content/53/7316853/html/organiser/home/addEvent.php의 44 번째 줄에있는 비 객체에 addEvent() 멤버 함수를 호출하십시오. 44 번째 줄은 $ return = $ eventlist-> addEvent ($ u_id, $ title, $ type, $ date, $ time, $ allday, $ location, $ dueby, $ notes)입니다. –

+0

신경 쓰지 마세요, 세션 변수를 사용하여 이벤트 목록 개체의 serialize 된 버전을 저장하고 세션이 만료되었습니다. P –

관련 문제