如何使用POST将javascript对象数组传递给php

时间:2009-05-21 03:45:01

标签: php javascript ajax

假设我有一个javascript对象数组,我试图将这些对象传递给php页面以将它们保存到数据库中。我没有问题将变量传递给php并在该变量上使用$ _POST [“entries”],但我无法弄清楚如何传递整个对象数组,因此我可以访问我的objects.entryId和.mediaType值在php页面上。

哦,在任何人问之前,是的,我需要这样做的原因是因为我有一个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 个答案:

答案 0 :(得分:3)

也许你需要看看json和jQuery ajax方法:

.- http://blog.reindel.com/2007/10/02/parse-json-with-jquery-and-javascript/

.- http://us.php.net/json_decode

由于jQuery的最后版本是1.3.x,因此可能有点过时,但是你会得到一个关于PHP json函数的想法......如果你的服务器没有启用json扩展,你可以使用一些php类:

.- http://google.com.co/search?rlz=1C1GPEA_enVE314VE314&sourceid=chrome&ie=UTF-8&q=php+json+class

祝你好运!

答案 1 :(得分: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;
    }   

这对我有用。对不起格式化和不完整的代码。我打算给出一个方向。 Google reault网站无法提供解决方案。希望你觉得这很有用。