2010-07-03 4 views
3

특정 사이트에 간단한 양식 제출 기능을 쓰고 있습니다. 스크립트는 현재 페이지의 특정 양식을 채우고 양식을 제출합니다. 또한 첫 번째 양식이 제출되고이 양식을 제출 한 후에 나타나는 두 번째 양식을 작성해야합니다.양식 제출 후 실행을 계속 실행하는 방법은 무엇입니까?

즉, 작성하고 제출해야하는 2 가지 양식이 있습니다.

그러나 문제는 정상적인 페이지에서 스크립트가 채워지고 첫 번째 양식이 제출된다는 것입니다. 제출 후 그러나, 스크립트가 작동을 멈 춥니 다! 나는 계속 사형 집행을하고 싶다!

2 프레임짜리 페이지에서 실수로했습니다! 대부분의 페이지에는 프레임이 없습니다!

function FillFirstForm(){ 
    doc=document; 
    //Some code removed from above...Fill Values 
    doc.forms[0].name.value = answerarray[1]; 
    doc.forms[0].address.value = answerarray[2]; 
    doc.forms[0].phone.value = answerarray[3]; 
    doc.forms[0].username.value = answerarray[4]; 

    //And Press Button 
    doc.forms[0].submit.click(); 

    iTimer=setInterval(FillSecondForm,5000); 
    return true; 
} 

function FillSecondForm(){ 
    clearInterval(iTimer); 
    doc.forms[0].tags.value = answerarray[5]; 
    doc.forms[0].reference.value = answerarray[6]; 
    document.forms[0].submit.click(); 
    return true; 
} 
+0

코드를 게시 할 수 있습니까? 모든 세부 사항을 보지 않고 대답을하는 것은 어렵습니다. – Oded

답변

2

기본 규칙은 페이지의 모든 스크립트 실행을 중지하고 다음 페이지를로드한다는 것입니다. 그것에 대해 아무 것도 할 방법이 없습니다.

Ajax를 사용하여 양식의 내용을 보내야 할 수도 있습니다. 그러면 현재 페이지가 활성 상태로 유지되고 원하는만큼 많은 제출을 할 수 있습니다.

매우 쉬운 방법은 jQuery form plugin입니다. 이 과정에서 많은 번거로운 수동 작업이 필요합니다.

+0

Unfortunatly 나는 페이지 코드에 대한 액세스 권한이 없습니다. 양식을 작성하는 스크립트 만 작성하고 있습니다. – Ray

+0

@ 레이 그럼 나는 그것이 가능하지 않다고 생각합니다. Ajax를 보내거나 iframe에 제출하여 보내는 페이지를 그대로 유지해야합니다. 스크립트를 사용하여 DOM을 조작 할 수 있어야합니다. 그런 다음 해당 기능을 추가 할 수 있습니다. 양식을 전혀 변경할 수 없다면 할 수 없다고 생각합니다. –

+0

xm, 어떻게 DOM을 조작하고 기능을 추가 할 수 있습니까? Javascript는 내 장점이 아닙니다! – Ray

0

첫 번째 양식을 제출하면 두 번째 양식의 본문 하중에서 FillSecondForm() 함수를 호출 할 수 있습니까?

+0

당신에게 진실을 말하면, 나는 모른다! 그럴 수 있니? 내가 말했듯이 나는 많은 자바 스크립트를 모른다. 파이어 폭스를위한 addon을 작성하면 자동으로 채워진다. – Ray

0

첫 번째 양식을 AJAX로 POST 한 다음 첫 번째 양식에 대한 응답을 수신 한 후 두 번째 양식을 제출할 수 있습니다. 아마도 이런

뭔가 :

function FillFirstForm() { 

    var post_data = 'name='+escape(answerarray[1]); 
    post_data += '&address='+escape(answerarray[2]); 
    post_data += '&phone='+escape(answerarray[3]); 
    post_data += '&username='+escape(answerarray[4]); 

    // TODO: make this cross browser :) 
    var req = new XMLHttpRequest(); 

    req.onreadystatechange = function() { 
     if (req.readyState == 4) { // The request has finished 
      if (req.status == 200) { 
       FillSecondForm(); 
      } 
      else { 
       // Deal with errors here 
      } 
     } 
    }; 

    req.setRequestHeader("Content-type","application/x-www-form-urlencoded"); 
    req.open('POST', '/submit_url', true); 
    req.send(post_data); 
} 

W3 학교는 여기 AJAX에 대한 자습서가 있습니다 http://www.w3schools.com/ajax/ajax_xmlhttprequest_create.asp를, 웹에 더 많은있다.

+0

멋진 !! 나는 이것이 할 수있다! 승인. 해냈어. 그러나 첫 번째 양식은 아약스에 의해 제출됩니다. 그것은 작동합니다. 하지만 이제는 FillSecondForm()이 작동하지 않는 것 같습니다. 응답은 내가 추측하는 어딘가에있는 기억에있다! 두 번째 양식을 작성하고 제출하는 방법은 무엇입니까? – Ray

+0

응답은 XMLHttpRequest, 즉 req 변수에 의해 저장됩니다. req.responseText 또는 req.responseXML을 통해 액세스 할 수 있습니다 (올바른 형식의 XML 문서 인 경우에만 후자를 사용하십시오). FillSecondForm()은 FillFirstForm()이 리팩터링되기 전에했던 것과 같은 방식으로 작동해야합니다. FillSecondForm()이 실패한 이유를 자세히 설명하는 메시지를 찾으려면 JavaScript 콘솔 오류 로그 (Firefox의 Ctrl + Shift + J)를 확인하는 것이 좋습니다. 또한 AJAX를 사용하기 위해 FillSecondForm()을 리팩터링 할 수도 있지만 페이지가 다시로드되지는 않는다는 점에 유의하십시오. 이는 원하는 결과가 아닐 수 있습니다. – tomit

+0

몇 가지 예외 처리가 포함되어 있으며 오류는 document.forms [0] .submit.click(); 정의되지 않았습니다. 테스트를 위해 다른 모든 명령을 제거했습니다. 방금 클릭 명령을 남겼습니다. 내가 뭔가를 놓치고 있다고 생각합니다. – Ray

관련 문제