2013-02-19 3 views
0

jquery에서 $. post를 배우고 있으며, 여러 시간이 지난 후에도 효과가 있다는 것을 느꼈습니다.

문제는 페이지를 처음 실행하거나 페이지를 수동으로 새로 고치는 경우에만 문제가 있다는 것입니다.

location.reload(); 제대로 작동하지 않거나 location.reload()가 올바르지 않습니다.

도움을 주시면 감사하겠습니다. 나는 죽었어. 나는 총 손실에있어

<script type="application/x-javascript"> 

    $("a#edit").click(function(e){ 
     e.preventDefault(); 
     var id; 
     id = $(this).attr('sid'); 
     $.modal.prompt('Editing Source ID: ' + id, 
      function(){ 
       $.post("<?php echo $_SERVER['PHP_SELF']; ?>", { 
             up: $('#prompt-value').attr('value'), 
             sid: id           
             }) 
       notify('Notification', 'Source ' + id + ' changed to: ' + $('#prompt-value').attr('value'), { 
        system: true, 
        icon: 'img/demo/icon.png', 
        iconOutside: false 
       }); 
       location.reload(); 
      }); 
    }); 

</script> 

:

여기 내 코드입니다.

답변

2

시도가 CONSOLE.LOG ($ ("A # 편집을"))를 추가 생각합니다.

이 코드는 AJAX가 현재 파일에 게시 된 것처럼 보인 후 혼란 스럽습니다. 종류가 있으면 ajax 게시물이 쓸모 없게되고 혼자서 게시 될 수도 있습니다.

대부분의 jquery 함수는 비동기식이며, 성공시에만 알림을 실행해야하는 경우 success 콜백 또는 지연 완료를 사용합니다.

$.post("<?php echo $_SERVER['PHP_SELF']; ?>", 
    { 
     up: $('#prompt-value').attr('value'), 
     sid: id           
    }   
).done(function (data) { 
    // Success, read response data, send notification if applicable and use 
    // the response data to change the current page without having to refresh 
}).fail(function() { 
    // Failure on the request, handle it 
}); 
+0

그게 효과가 있었지만 location.reload()를해야했습니다. 이것은 내가 편집하고있는 테이블이 문서의 시작 부분에서 PHP 함수로부터 호출 되었기 때문입니다. 페이지가로드되면 fetchAllUsers에 PHP 함수가 실행되고 본문에서는 HTML 및 PHP를 사용하여 사용자 테이블을 작성합니다. 이 클릭 동작은 사용자가있는 행의 수정 버튼 (ID로 표시됨)에 있습니다. 나는 fetchAllUsers에 PHP funnction을 새로 고침하고 페이지를 다시로드하지 않고 테이블을 다시 쓰는 방법을 생각할 수 없었다. 그리고 자바 스크립트에서 PHP를 실행하는 생각은 나를 아프게합니다. – ChadM

+0

정상적으로 작동하면 작동합니다. 그러나 당신의 설명에 의해 당신의 코드를 구성하는 데 도움이되는 MVC에 대해 읽는 것을 고려해보십시오. 코드를 읽거나 유지하기가 쉽지 않다고 가정합니다. – cernunnos

+0

의견이 있습니까? 나는 당신의 충고를하고 있으며 cakePHP와 CodeIgniter에 대해 읽었습니다. JqueryUI를 사용하면 가장 쉽게 픽업하여 사용할 수 있습니다. – ChadM

0

$("a#edit").live('click',function(e){ 
... 
}); 

jQuery를 1.4를 사용

는. + 난 당신이 클릭 이벤트를 부착하기 전에

+0

http://api.jquery.com/live/ 다음 후보에 대한 찬성표는 무엇입니까? jQuery 1.7부터 .live() 메소드는 더 이상 사용되지 않습니다. 이벤트 처리기를 연결하려면 .on()을 사용하십시오. 이전 버전의 jQuery 사용자는 .live()보다 .delegate()를 우선 사용해야합니다. –

+0

프롬프트가 표시되면 페이지가 다시로드됩니다. 위임 문제라고 생각하지 않습니다. 말할 필요도없이'.live'는 현재 버전의 jQuery에는 존재하지 않습니다. –

+0

그는 위임 된 이벤트를 대상으로 페이지에 새로운 콘텐츠를 가져 오지 않습니다. –