簡體   English   中英

如何從JavaScript onChange事件更改PHP中的兩個變量值

[英]How to change two variables value in PHP from a JavaScript onChange event

我有一個包含以下變量的表單:

$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

我怎樣才能做到這一點?

PHP變量和javascript是兩件事。

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

如果您只想在本地交換數據(沒有解釋為什么需要交換變量,以便我只能假設事情),建議您聲明用php變量初始化的Javascript變量。

您需要知道的是,您使用php生成具有各種變量的頁面(包含html / css和javascript)。 它生成文本。 因此,PHP變量與生成的輸出之間沒有鏈接。

您可以使用ajax從服務器獲取新的變量值,並使用javascript來完成所需的操作。

您將需要為此使用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()即可完成工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM