2011-09-03 67 views
2

我覺得這是我現在應該學會的東西,我敢肯定這是我錯過的小事,但我可以用澄清來確保我的方法是正確的。AJAX Post to self in PHP

我使用AJAX將數據發佈到self這是一個包含php和html的文件。我可以編寫的PHP罰款,但一個成功的Ajax後,我怎麼只返回通過PHP處理的數據,而不是剩餘的HTML?只是發佈到單獨的腳本是否更好?

+4

我個人更喜歡總是使用單獨的腳本使用Ajax –

+1

如果你想使用相同的PHP,你可以使用if/else來顯示/隱藏剩餘的html。 – benck

回答

7

如果你有PHP處理的文件的開頭POST請求,你可以做這樣的事情:

<?php 
    if (isset($_POST['somevar'])) { 
     /* do something */ 
     exit(0); 
    } 
?> 

exit()將在該行停止網頁的加載速度。例如,我認爲使用單獨的腳本來處理動態AJAX請求會更好一些。

+0

感謝您的輸入! –

2

它總是取決於你的需求,但如果使用相同的腳本就足夠了,那就去做吧。

如果您希望腳本不發送任何比你的答案多爲XML HTTP請求,發送數據後,使用exit();PHP,這將使得腳本結束在這一點上。

3

您可以刮除生成文檔的更改部分,並將其插入原始頁面。通過這種方式,您還可以讓您的網頁適用於JavaScript禁用的用戶,而不是專門做任何事情。

例子:

<html><title>Unobtrusive AJAX Example</title> 
<script type="text/javascript" 
src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"> 
</script><script type="text/javascript"> 

$("form.ajax[id]").live('submit', function() { 
     $(this).find("input[type='submit']").attr("disabled", true); 
     $.ajax({ 
      type: $(this).attr('method') || 'POST', 
      url: $(this).attr('action') || window.location.pathname, 
      data: $(this).serialize(), 
      context: $(this), 
      success: function(data) { 
       $(this).html(
        $(data).find("#" + $(this).attr("id")).html() 
       ); 
      } 
     }); 
    return false;    
}); 
</script> 
</head><body> 
<div><form method="post" class="ajax" id="main"> 
    <p><?php echo date('H:i:s'); ?></p> 
    <p><input type="submit"></p> 
</form></div> 
<!-- keep the div: you got to have at least one div to make it work --> 
</body></html> 
+1

這就像一個人的舌頭上一陣涼爽的雨水。在沙漠中。 –

0

付諸腳本:

if($_POST['id']) { 

$data = array('return'=>'returnValue'); 
$data = json_encode($data); 

exit($data); } 

的Javascript:

$.ajax({ 
    url: 'frmSelf.php', 
    data: $("#frmSelf").serialize(), 
    dataType: 'json', 
    type : 'post', 
    success : function(returnData) { 
     console.log(returnData); 
    } 
});