2011-03-15 41 views
5

我在從Javascript中調用PHP腳本而不離開當前HTML頁面(如果可能的話)時遇到了一些麻煩。我知道使用AJAX是可能的,儘管可以單獨使用Javascript嗎?從Javascript中調用PHP腳本而不離開當前頁面

語境: -

我想我的頁面進行使用Javascript(使用的onclick)動畫短片,然後立即調用PHP腳本將數據插入到MySQL數據庫 - 無需離開當前頁面,從而不會禁止動畫。

我可以做的動畫部分和將數據插入到數據庫等,但我怎樣才能在Javascript動畫函數結束時調用PHP腳本?

任何指針,代碼片段等將不勝感激!^_^

道歉,如果這個問題以前被問過。

+2

請參閱:[什麼是AJAX,真的嗎?](http://stackoverflow.com/questions/958040/what-is-ajax-really) – Orbling 2011-03-15 01:22:04

回答

1

PHP是一個服務器端語言。 JavaScript是客戶端語言。

如果你想執行服務器端代碼,你沒有選擇做一個往返服務器。如果你不想離開頁面,你唯一的選擇是做一個異步請求(aka AJAX)。

使用JavaScript庫(如jQueryMooTools)可大大簡化此類任務。例如,你可以使用MooTools在腳本的結尾這樣做的請求:

var req = new Request({url: '/backend/doPHPInsert.php'}); 
req.send(); 

有辦法通過這樣做沒有AJAX,例如,動態創建的iframe(或任何其他元素獲取資源)。

9

AJAX是異步JavaScript和XML, 它的JavaScript技術,使您可以向服務器發送一個請求(如當您輸入網址,你的瀏覽器),並有一個JavaScript字符串的響應,而不是渲染它的這一頁。

問題是不同的瀏覽器沒有以同樣的方式實現AJAX,所以我建議使用jQuery進行抽象。

用jQuery做到這一點:

<script> 
$.get("backend.php",{param:value},callbackFunction); 
callbackFunction(data) 
{ 
alert(data); 
} 

</script> 
0

我的理解是可以使用AJAX,但單獨使用Javascript這可能嗎?

如果你不想使用XHR,你可以使用這個醜陋的黑客...

var request = 'mysql-insert.php', 
    image = new Image(); 

image.onload = function() { 
    // Success 
} 

image.onerror = function() { 
    // Error 
} 

image.src = request; 

除廣泛使用AJAX的(或者需要畫一個十字之前,只有真正使用域請求)。

我只會使用AJAX。 jQuery爲使用XHR提供了一些很好的抽象。

+0

在這裏不適用。這可以通過iframe來完成。 – AbiusX 2011-03-15 01:22:10

+0

@AbiusX它回答了問題*你可以單獨使用JavaScript嗎?*我假定沒有XHR。 – alex 2011-03-15 01:23:24

+0

我不是在談論沒有XHR的部分,而是關於圖像破解。它用於CSRF而不是一個請求。您可以添加

0

這對於使用純正的XMLHttpRequest的一些很好的例子:(特別是向下滾動到異步例子 - 現在你用氣做飯)https://developer.mozilla.org/En/XMLHttpRequest/Using_XMLHttpRequest

編輯:又見http://msdn.microsoft.com/en-us/library/ms535874%28v=vs.85%29.aspx其中有實例用於處理沒有本地window.XMLHttpRequest的IE版本。

現在,讓我們坦率地說 - 是的,與XHR本身(特別是跨瀏覽器)一起工作很呆板。你可以使用幾乎所有的東西(jQuery,Dojo,MooTools,Prototype,Closure,YUI等)更容易地做XHR,因爲所有的都可以給你更簡潔的XHR設施。

在開始讓圖書館爲你做這件事之前,瞭解你在表面下工作的情況仍然很好。 :)

0

如果你不希望包括jQuery庫,你可以簡單做到以下

一)廣告的iframe,大小0像素因此它是不可見的,href是空白

B)執行這是你的js代碼函數中

window.frames['iframename'].location.replace('http://....your . php'); 

這將執行PHP腳本,你可以爲例,來更新數據庫...

2

正好具有相同的起訴,所以我想出了這樣的事情。您只需添加所需的代碼,然後將do_the_script函數分配給onclick事件。

<script type="text/javascript"> 
var myIntv; 
function do_the_script() { 
    // play animation ... 
    var address='fancy_script.php'; 
    var tmp = new XMLHttpRequest(); 
    myIntv=setInterval(function(){ 
    tmp.addEventListener("load", doneHandler, false); 
    tmp.open("POST", address); 
    tmp.send(null); 
    }, 1000); 
} 

function doneHandler(event) { 
    // maybe do something when script is executed 
    clearInterval(myIntv); 
} 
</script> 

正如您可能已經注意到的,「調用」地址的代碼每隔1秒執行一次。這是爲了確保通話足夠多次以獲得單個肯定答案,然後調用doneHandler並在之後清除間隔。如果你認爲你的服務器可以響應得更快或更慢,你應該相應地改變這些毫秒。

相關問題