簡體   English   中英

將動態jQuery帖子傳遞給PHP

[英]passing dynamic jQuery post to PHP

嗨,我需要以下代碼的幫助。 我搜索了一些帖子和其他網站但無濟於事。

這是我正在構建的網站的精簡版本,其中包含可使用CKeditor編輯的眾多div的管理頁面,因此序列化對我來說不是一個選項(我不認為)。 當我硬編碼$.post索引並使用內容變量時,我可以將數組傳遞給PHP。

這對一頁來說沒問題,但我有很多。 因此,當我嘗試將數組字符串構造為變量並將其作為第二個參數傳遞給$.post ,它會失敗。 Firebug顯示json被傳遞,雖然值是紅色的(硬編碼版本沒有被識別為json!Just Index Value)。 我相信這只是一個語法問題,但我已經碰壁了。 任何人都可以向我展示光明。

PHP處理程序嘗試各種方法來讀取POST。

帶有js的動態HTML:

<html>
<head>
<title>jQuery POST Test</title>

<script type="text/javascript" src="jQuery.min.js"></script>
<script type="text/javascript">
function getElementsByClass(searchClass) {
    var classElements = new Array();
    var node = document;
    var tag = 'div';
    var els = node.getElementsByTagName(tag);
    var elsLen = els.length;
    var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
    for (i = 0, j = 0; i < elsLen; i++) {
        if ( pattern.test(els[i].className) ) {
            classElements[j] = els[i];
            j++;
        }
    }
    return classElements;
}  

function getDivs(){
var divArry = getElementsByClass('editable')
var postElmnts = '';
    for(i=0; i<divArry.length; i++){
        pageName = divArry[i].id;
        pageContent = document.getElementById(pageName).innerHTML;
        //alert(pageName + ': ' + pageContent);//Test if divs are identified properley
        postElmnts= postElmnts + pageName + ': ' + pageContent + ', ';
    };
    postElmnts = postElmnts.slice(0, -2);
    postArry = '{' + postElmnts + '}';
    $.post("process_jQuery_test.php",postArry, function(data){alert(data + 'Original: ' +  postArry);});

}

function grabText(){
    var one = document.getElementById( 'block1' ).innerHTML;
    var two = document.getElementById( 'block2' ).innerHTML;
    var three = document.getElementById( 'block3' ).innerHTML;
    $.post("process_jQuery_test.php", { block1: one, block2: two, block3: three}, function(data){alert( data );} );

}

</script>
</head>

<body>
    <button onClick="getDivs();">Get Divs dynamically</button>
    <button onClick="grabText();">Grab Text to hard coded index</button>


    <div id="block1" class="editable"><p>This is Block 1 content</p></div>
    <div id="block2" class="editable"><p>This is Block 2 content</p></div>
    <div id="block3" class="editable"><p>This is Block 3 content</p></div>
</body>
</html>

這是PHP測試處理程序:

<?php
$data = json_decode($_POST, true);
$decode = json_decode($_POST,true);
$decodeNstrip = json_decode(stripslashes($_POST),true);

echo "Post 0: ".$_POST[0]."\n\r";

echo "\n\rPost block1: ".$_POST['block1']."\n\r";

echo "\n\rPost loop\n\r";
foreach($_POST as $key => $value){
    echo $key.': ' .$value."\n\r";
} 

echo "\n\rPost decode: ";
print_r($decode)."\n\r";

echo "\n\rPost decode and strip: ";
print_r($decodeNstrip)."\n\r";

echo "\n\rPost Array: ";
print_r($_POST)."\n\r";

?>

傳遞給.post的數據只接受StringObject

String作為查詢字符串,如year=2000&month=11

要么

鍵值/配對中的Object ,例如{"year":2000,"month":11}

在grabText中,您傳遞一個數組/對象,但在getDivs中,您正在嘗試發送文本。 文本可以格式化為查詢字符串 ,但我更喜歡這種方法。

function getDivs(){
var divArry = getElementsByClass('editable')
var postElmnts = '';
var msg = {}
    for(i=0; i<divArry.length; i++){
        pageName = divArry[i].id;
        pageContent = document.getElementById(pageName).innerHTML;
        msg[pageName] = pageContent
    };
    $.post("handle.php",msg, function(data){alert(data);});
}

這是jQuery的做法。 我仍然更喜歡更傳統的方法(加上它更快一點)。

function getDivs(){
    var msg = {}
    $('.editable').each(function(e){
            msg[$(this).attr('id')] = $(this).html();
    });

    $.post("handle.php",msg, function(data){alert(data);});
}

暫無
暫無

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

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