如何使用POST方法将JavaScript对象数组传递给PHP

5
假设我有一个 JavaScript 对象数组,并且我正在尝试将这些对象传递到一个 PHP 页面以将它们保存到数据库中。我没有问题将变量传递给 PHP 并在该变量上使用 $_POST["entries"],但我无法弄清楚如何传递整个对象数组,以便我可以在 PHP 页面上访问我的 objects.entryId 和 .mediaType 值。
哦,在有人问之前,是的,我需要这样做的原因是因为我有一个 Flash 上传器,你猜对了...上传到 CDN 服务器(远程),远程服务器只回复此类 JS 对象。
感谢任何人能够提供的帮助。
以下是我的 JS 函数:
function test() {
        entriesObj1 = new Object();
        entriesObj1.entryId = "abc";
        entriesObj1.mediaType = 2;
        entriesObj2 = new Object();
        entriesObj2.entryId = "def";
        entriesObj2.mediaType = 1;

        var entries = new Array();

        entries[0] = entriesObj1;
        entries[1] = entriesObj2;
        var parameterString;

        for(var i = 0; i < entries.length; i++) {
            parameterString += (i > 0 ? "&" : "")
              + "test" + "="
              + encodeURI(entries[i].entryId);
        }

        xmlhttp.open("POST","ajax_entries.php",true);

        xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xmlhttp.setRequestHeader("Content-length", parameterString.length);
        xmlhttp.setRequestHeader("Connection", "close");

        xmlhttp.onreadystatechange  = handleServerResponseTest;
        xmlhttp.send(parameterString);
    }
    function handleServerResponseTest() {
       if (xmlhttp.readyState == 4) {
         if(xmlhttp.status == 200) {
        alert(xmlhttp.responseText);
         }
         else {
            alert("Error during AJAX call. Please try again");
         }
       }
    }
2个回答

3
我也遇到了同样的问题。但是搜索没有帮助。
我尝试自己调整和测试。并且成功了。虽然我使用的是POST方法。请尝试使用GET方法来实现这个想法。以下是想法:
将数组索引值用方括号括起来添加到数组的Post/Get变量名称中。对于每个数组元素都要这样做。
以下脚本的部分var parameters="&Name[0]="+namevalue1+"&Name[1]="+namevalue2;会给你一个提示。
这是我使用的测试JS(再次说明,这使用的是POST方法而不是GET):
    var xmlAJAXObject;

    function test() {
        xmlAJAXObject=GetxmlAJAXObject();
        if (xmlAJAXObject==null)    {
          alert ("Oops!! Browser does not support HTTP Request.");
          return  false;
        }
        var namevalue1=encodeURIComponent("Element 1");
        var namevalue2=encodeURIComponent("Element 1");

        var parameters="&Name[0]="+namevalue1+"&Name[1]="+namevalue2;

        xmlAJAXObject.open("POST", "test.php", true);   
        xmlAJAXObject.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xmlAJAXObject.setRequestHeader("Content-length", parameters.length);

        xmlAJAXObject.onreadystatechange=stateChanged;

        xmlAJAXObject.send(parameters);

    }

    function stateChanged() {

        if (xmlAJAXObject.readyState ==4)   {
            if (xmlAJAXObject.status == 200) {
                alert('Good Request is back');
                document.getElementById("show").innerHTML=xmlAJAXObject.responseText;
            }
        }
    }

    function GetxmlAJAXObject() {
        if (window.XMLHttpRequest)  {
            // code for IE7+, Firefox, Chrome, Opera, Safari
            return new XMLHttpRequest();
        }
        if (window.ActiveXObject)  {
          // code for IE6, IE5
            return new ActiveXObject("Microsoft.Microsoft.XMLHTTP");
        }
        return null;
    }   

这对我很有用。对于格式和不完整的代码我很抱歉。我想给出一个方向。谷歌结果网站无法提供解决方案。希望你会发现这很有用。


我希望在2012年没有其他人在使用它... jQuery、Prototype等可以做得更好... - ncubica

3

顺便说一句...对于链接感到抱歉! - coma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接