2011-10-13 2 views
0

작업 메서드를 통해 원격 서버에 양식을 게시 할 수 있지만 postata 전에 데이터베이스를 updata jquery 함수를 호출하는 - 모든 IE에서 작동합니다. , FF 등 ...하지만 Safari는 반환 값이 true 일 때 jquery 데이터베이스 삽입을 수행하지 못하거나 async : true, ... 둘 다 false 인 경우 (즉, html 형식이 false 선언으로 인해 게시 관리를하지 못합니다.) 완벽하게 작동합니까? 하지만 사실이라면 폼은 POST 만 할 것이지만 jquery ajax 포스트는 실행되지 않을 것입니다.jquery 아약스 게시 IE, FF, 크롬 있지만 Safari 잘 작동합니다.

폼 ...

<form action="http://anotherplace" method="post" id="myform" > 

<button class="button-big" type="submit" id="myform-post" ><span>Continue</span></button> 

기능 ...

스크립트는 제출 ID를 기반으로 '클릭'방식에서 실행
$(document).ready(function() { //available when doc renders 


    $("form#myform").submit(function(){ 

    var title = $("select#title").val(); 
    if (title == "") { 
    $("select#title").css({backgroundColor:"#ccc"});   
    $("select#title").focus(); 
    return false; 
    } 

    var firstname = $("input#fname").val(); 
    if (firstname == "") { 
    $("input#fname").css({backgroundColor:"#ccc"}); 
    $("input#fname").focus(); 
    return false; } 

     var surname = $("input#sname").val(); 
    if (surname == "") { 
    $("input#sname").css({backgroundColor:"#ccc"}); 
    $("input#sname").focus(); 
    return false; } 



//Grab the form values to pass via AJAX for DB insert 

var cameraMake = $("input#cameraMake").val(); 
var cameraModel = $("input#cameraModel").val(); 
var cameraValue = $("input#cameraValue").val(); 
var mp3Make = $("input#mp3Make").val(); 
var mp3Model = $("input#mp3Model").val(); 
var mp3Value = $("input#mp3Value").val(); 


     var dataString='&title='+ title + '&firstname=' + firstname + '&surname=' + surname + '&add1=' + add1 + '&add2=' + add2 + '&add3=' + add3 + '&pcode=' + pcode + '&email=' + email + '&phone=' + phone +'&username=' + username + '&pword=' + pword; 

var ajaxComplete = false; 
if(!ajaxComplete){ 
     $.ajax({ 
      async: true,    
      type: "POST", 
      url: "process-.php", 
      data: dataString, 
      success: function() { 
       // $('#details').html("<div id='post-message'></div>"); 
       // $('#post-message').html("<h2 style='color:#fff'>Thanks for getting in touch.</h2>") 

       ajaxComplete = true; 
       this.submit(); 

      } 
     }); 
     return false; // Abort form submission by now 
    }else{ 
     return true; // Submit normally 
    } 
}); 


}); //End of document.ready 

(수행 확인 후 AJAX 포스트) .

Safari (테스트 한 모든 버전)에서 실패하거나 필요한 솔루션을 더 잘 제공 할 수 있습니까? - 비동기/게시와 관련이 있습니까? 내가 말했듯이 false로 설정하면 잘 작동하지만 ... 아직 게시하려면 HTML 양식이 필요합니다!

많은 감사! 대기중인이있는 동안

+0

사이드 노트 : HTML 5입니까? ID는 HTML 4의 숫자로 시작할 수 없습니다. –

+0

문제 해결 ... 성공 함수에서 $ ("# myform-post"). trigger ("submit") 만 Safari에서 작동하는 것 같습니다. – Marc

답변

0

내가 제대로 이해하고

window.location.url = "YOUR URL"; 

그래서

$.ajax({ 
    async: true,    
    type: "POST", 
    url: "process-.php", 
    data: dataString, 
    success: function() { 
     $('#details').html("<div id='post-message'></div>"); 
     $('#post-message').html("<h2 style='color:#fff'>Thanks for getting in touch.</h2>"); 
     window.location.url = "YOUR URL"; 
    } 
}); 
return false; 
+0

안녕하세요, 위의 (action = "html form에서 post를 삭제하여 action이 공백이되었습니다.) ... ajax post는 작동하지만 양식은 HTML을 window.location (원격 서버)에 게시하지 않습니다. 루프의 페이지? – Marc

+0

@Marc 귀하의 양식 활동을 변경하지 마십시오. 너의 것과 광산 코드 만 바꾸면된다. window.location.url에서 양식 작업 URL을 제공하십시오. –

1

, 당신은 페이지를 언로드 할

return false; 

를 사용하고 폼 조치 가야한다 AJAX 요청. 따라서 브라우저가 작동하는 것처럼 보이더라도 올바르게 작동 할 확률은 거의 없습니다.

제 조언은 처음에 양식의 POST 요청 (return false;)을 중단하고 success 처리기에 코드를 추가하여 AJAX 요청이 완료 될 때 양식 제출을 시작하는 것입니다. 플래그 변수를 사용하면 AJAX 요청이 처음으로 트리거됩니다.

업데이트 :

일부 빠르고 더러운 및 테스트되지 않은 코드입니다. 또한 코드 블록의 시작 부분을 생략 했으므로 코드 블록을 간단하게 만들었습니다.

var ajaxComplete = false; 
$("form#3-form").submit(function(){ 
    if(!ajaxComplete){ 
     $.ajax({ 
      async: true,    
      type: "POST", 
      url: "process-.php", 
      data: dataString, 
      success: function() { 
       $('#details').html("<div id='post-message'></div>"); 
       $('#post-message').html("<h2 style='color:#fff'>Thanks for getting in touch.</h2>") 

       ajaxComplete = true; 
       this.submit(); 

      } 
     }); 
     return false; // Abort form submission by now 
    }else{ 
     return true; // Submit normally 
    } 
}); 
+0

안녕하세요, 감사합니다. - 구현 방법에 대해 여전히 조금 혼란 스럽습니까? 어쩌면 예를 들어 주시겠습니까? 정말로 이것으로 고투하고있는 Im! 고맙습니다. – Marc

+0

@Marc - 내 업데이트보기 –

+0

안녕하세요, 제 스크립트의 슬림화 된 버전으로 초기 게시물을 업데이트했습니다. - 귀하의 코드를 추가했지만 여전히 Safari에서 실패합니까? 그것은 단지 아약스 POST를 게시하거나 FF, IE와 같은 HTML 양식을 게시 할 수 있습니다. 위의 코드를 업데이트하면 해결 될 수 있기를 바랍니다. 감사합니다. – Marc

관련 문제