2012-04-01 78 views
0

在PHP中改變兩個變量的值有以下變量的一種形式:我如何從一個JavaScript onChange事件

$amt and $f 

$a1 and $f1 
$a2 and $f2 
$a3 and $f3 
$a4 and $f4 

$amt and $a are input numbers, while $f are label text 

<input id="a1" name="a1" type="text" value="<?php echo $a1; ?>" onChange="????, document.e.submit();" /> 
(the same to a2, a3, and a4) 

我想要做的是的onChange,我需要更換$ AMT和$ F。

$ AMT = $ A1(用戶進入新) $ F = $ F1

我怎麼能這樣做?

+0

[javascript to php variable]可能重複(http://stackoverflow.com/questions/6084216/javascript-to-php-variable) – 2012-04-01 15:55:13

+0

也許,但是這個問題沒有任何真正的答案... – 2012-04-01 15:58:27

回答

0

您將需要使用AJAX爲此,我需要他們在後端進行處理。假設你正在使用純JavaScript,而不是一個庫,你要沿着這些線路做一些事情:

//for cross browser support 
var XMLHttpFactories = 
[ 
    function() {return new XMLHttpRequest()}, 
    function() {return new ActiveXObject("Msxml2.XMLHTTP")}, 
    function() {return new ActiveXObject("Msxml3.XMLHTTP")}, 
    function() {return new ActiveXObject("Microsoft.XMLHTTP")} 
]; 

//find an xmlhttpfactory that will work 
function createXMLHTTPObject() 
{ 
    var xmlhttp = false; 
    for (var i=0;i<XMLHttpFactories.length;i++) { 
      try { 
        xmlhttp = XMLHttpFactories[i](); 
      } 
      catch (e) { 
        continue; 
      } 
      break; 
    } 
    return xmlhttp; 
}; 

//process post variables for your AJAX request 
function parsePostData(postData) 
{ 
    var appendString = '?'; 
    for(key in postData) 
     { 
      appendString += key + '=' + postData[key] + '&'; 
     }; 
     appendStrTrim = appendString.substring(0, appendString.length-1) 
    return appendStrTrim; 
}; 

//this is where the magic happens 
    function sendRequest(url,callback,postData) 
{ 
var req = createXMLHTTPObject(); 
if (!req) return; 
var method = (postData) ? "POST" : "GET"; 
req.open(method,url,true); 
if (postData){ 
    req.setRequestHeader('Content-type','application/x-www-form-urlencoded'); 
    if (postData.passwd){ 
     req.withCredentials = true; 
    } 
} 
req.onreadystatechange = function() { 
     if (req.readyState != 4) return; 
     if (req.status != 200 && req.status != 304) { 
      var errorCode = 'HTTP error: ' + req.status; 
      callback(errorCode); 
     } 

     var response = JSON.parse(req.response) 
     if (response.jquery){ 
      console.log(req.getAllResponseHeaders()); 
     } 
     if(response.data && response.data.modhash){ 
      reddit.control.setModHash(response.data.modhash) 
     } 
     if(response.data && response.data.children && typeof callback =='function'){ 
      callback(response.data.children); 
     }else if(response.data && typeof callback=='function'){ 
      callback(response.data); 
     }else if(typeof callback== 'function'){ 
      callback(response); 
     }; 
} 
if (req.readyState == 4) return; 
var postString = parsePostData(postData); 
req.send(postString); 
}; 

那麼,當你想改變PHP變量,你會打電話sendRequest()像這樣:

`sendRequest('http://example.com/changeThosePHPVariables.php', function(){/*do this when done*/}, {amt: 'value', f: 'value'}) 

那麼你只需要使用changeThosePHPVariables.php重新分配變量,你會發現它們是$_POST['amt']$_POST['f']

如果您使用像JQuery這樣的庫,您可以使用$ .ajax()來執行骯髒的工作,這一切都會變得更容易。

0

PHP變量和javascript是兩個不同的東西。

PHP是服務器端,JavaScript客戶端(瀏覽器)。

如果你只想在本地交換數據(你沒有解釋爲什麼你需要交換變量,所以我只能假設),我建議你聲明JavaScript變量初始化與PHP變量。

你需要知道的是,你使用PHP來生成一個頁面(包含HTML/CSS和JavaScript)與各種變量。它生成文本。所以PHP變量和生成的輸出之間沒有任何關聯。

+0

我明白那個。顯然,我的PHP腳本需要解析這兩個變量:$ amt和$ f! – 2012-04-01 15:48:26

+0

解析'$ amt和$ f'是什麼意思?抱歉,我沒有得到你想要達到的目標。你用php語法來命名你的變量,所以我知道你想在onChange輸入文本事件上交換兩個php變量。不過,我不知道你的變量來自哪裏?他們是否保存在某個地方?因爲在兩次php腳本調用之間所有變量都被刷新。腳本之間唯一可以保存變量的地方是cookie和php會話。您可以使用AJAX(XHR對象)在onChange事件上異步調用php腳本(根據您的需要使用POST或GET方法)。 – grifos 2012-04-01 15:55:32

0

您可以使用ajax從服務器獲取新的變量值,並使用JavaScript來做你所需要的。