2014-12-14 2 views
0

나는 그것이 매우 어리석은 질문이라고 생각한다. 그러나 구글의 시간 이후에 - 나는 전혀 모른다. 요점은 내 웹 사이트에서 "클릭"이벤트를 처리 한 후 다시로드 페이지가 필요하다는 것입니다. 크롬 \ 오페라에서 문제없이 작동합니다. 하지만 파이어 폭스에는 몇 가지 버그가 있습니다. 내 JS의 의견 코드 : 나는 후 클릭하기 때문에, 부스 방법을 작업해야Firefox 반환 false; (preventDefault();) 및 window.location.reload(); 함께

$('#project_create').click(function() { 
    var projectname = $("#project_name").val(); 
    var projectdescription = $("#project_description").val(); 
    $.post("projects/add_project.php", { 
    project_name: projectname, 
    project_description: projectdescription 
    }); 
    $("#create_project_form").hide("slow"); 
    $("#project_list").show("slow"); 
    //return false; - if it uncomment, all work, but next page reloader doesn't work. 
    window.location.reload(); //but if it's work, FireFox doesn't send $.post-query 
}); 

- $ _SESSION에 넣어 스크립트 [ 'my_var'] 몇 가지 변수, 그리고이 변수는 다시로드 페이지 만 후 사용 가능한입니다. 어쩌면 다른 방법이있을 수 있습니까? firefox 및 의 기능에서 문제를 여기에서 이해하므로 preventDefault();

감사!

답변

1

아약스 요청을 수행하기 전에 페이지를 새로 고침하면됩니다. 이전 window.location.reload()

+0

브라우저가 페이지를 떠나는 경우 보류중인 요청이 취소되고 서버에 도착하지 않을 수도 있음을 강조하고 싶을 수도 있습니다.: D – Joseph

+0

정말 놀랍습니다. :)) 정말 고마워! – Sysanin

+0

왜 window.location.reload() 후에 return = false를 넣지 않습니까? – SuperUberDuper

1

return을 실행하면 해당 행 뒤의 코드에 더 이상 도달하지 않고 "불량 코드"로 간주됩니다. return 뒤에 단순히 코드를 넣는 것은 아닙니다.

return false을 사용하여 기본 기본 동작을 방지 할 때 또 다른 문제가 있습니다. 위임/버블 링을 방지합니다. DOM 트리 (특히와 연결되는 이벤트 핸들러)에서 상위에 올려 진 이벤트 핸들러는 실행되지 않습니다. 위임이 중요한 경우 사용하지 마십시오.

목표가 링크의 기본 동작을 방해하고 JS에서 수행하는 것이라면 대신 event.preventDefault을 사용하십시오. event 개체는 처리기의 첫 번째 인수로 전달됩니다.

$('#project_create').click(function(event) { 
    event.preventDefault(); 

    // rest of the code 
}); 
+0

rigth way, thanks. 감사합니다. 하지만 몇 가지 문제 : 만약 코멘트 window.location.reload(); - 좋아.하지만 재 장전해야 해. reload가 작동 할 때 - $ .post가 실행되지 않습니다 (데이터베이스 또는 다른 작업에 쓰지 않습니다). – Sysanin

+1

감사합니다! Freez가 솔루션을 다시로드하여 업데이트합니다! :) good) – Sysanin

+0

멋진 설명, 정말로 고마워요! – Sysanin

0

는 다른 답변이 제안하는 것뿐만 아니라, 당신은 또한 location.reload 방법은 비동기 적으로 setTimeout를 사용하여 실행할 수 있습니다

$.post("projects/add_project.php", { 
    project_name: projectname, 
    project_description: projectdescription 
}, function(){ 
    window.location.reload(); 
}); 

및 제거 :

봅니다 아약스 성공 콜백 핸들러에 페이지를 다시로드 :

setTimeout(function() { location.reload(); }, 1); 
return false; 

EDIT : asynconous AJAX 요청을 실행하고 즉시 페이지를 다시로드한다는 아이디어는 페이지를 다시로드 할 때까지 AJAX 요청이 완료되지 않았기 때문에 잘못된 것입니다.

따라서 허용 된 답변에 제안 된대로 콜백을 사용해야합니다. 또는 동기 AJAX 요청을 사용할 수는 있지만 일반적으로 바람직하지 않은 요청이 완료 될 때까지 실행이 고정됩니다.

+0

감사합니다! 하지만 지연이 올바른 방법이 아닌 다른 시간에 우리는 다른 핑이있다 : ( – Sysanin

+0

콜백을 사용하는 것이 더 좋다.이 경우에는 임의의 setTimeout이 안정적이지 않다. 어쨌든 1 밀리 초가 너무 짧다. – Freez

+0

어떻게 되는가? 안정적이지 않은가? 그것이하는 일은'location.reload' 메쏘드를 순서없이 실행시키는 것입니다. 'preventDefault()'솔루션은 이식성이 떨어지는 것을 제외하고는 제안 된'preventDefault()'솔루션과 거의 차이점이 없습니다 (http://stackoverflow.com/a/4479267/657401 참조). – Witiko