Как передать массив объектов JavaScript в php с помощью POST - PullRequest
5 голосов
/ 21 мая 2009

Допустим, у меня есть массив объектов javascript, и я пытаюсь передать эти объекты на страницу php, чтобы сохранить их в базе данных. У меня нет проблем с передачей переменной в php и использованием $ _POST ["records"] для этой переменной, но я не могу понять, как передать весь массив объектов, чтобы я мог получить доступ к своим значениям objects.entryId и .mediaType. на странице php.

Да, и прежде, чем кто-либо спросит, да, причина, по которой мне нужно сделать это таким образом, заключается в том, что у меня есть флэш-загрузчик, о котором вы уже догадались ... загрузка на сервер 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 голосов
/ 14 июня 2009

У меня тоже была такая же проблема. Но помощь в поиске гугла.

Я попробовал себя настроить и протестировать. И я получил это. Я использую 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 не могут дать решение. Надеюсь, вы найдете это полезным.

3 голосов
/ 21 мая 2009

может быть, вам нужно взглянуть на методы 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, но вы получите представление об этом и о функциях json в PHP ... если на вашем сервере не включено расширение json, вы можете использовать несколько php классы:

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

удачи!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...