views:

2079

answers:

2

Lets say I have an array of javascript objects, and I am trying to pass those objects to a php page to save them into a database. I have no problems passing a variable to the php and using $_POST["entries"] on that variable but I can't figure out how to pass an entire array of objects, so I can access my objects.entryId and .mediaType values on the php page.

Oh and before anyone asks, yes the reason I need to do it this way is because I have a flash uploader, that you guessed it.. uploads into a CDN server (remote) and the remote server only replies back with such js objects.

Thanks for any help anyone can provide.

Here is my JS functions:

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  A: 

maybe you need to take a look at json and jQuery ajax methods:

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

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

The turorial is maybe a little outdated because jQuery last version is 1.3.x but you will get an idea on that and about the PHP json functions... if your server does not have the json extension enabled you can use some php classes:

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

good luck!

coma
btw... sorry about the links!
coma
A: 

I too had the same trouble. But googling dint help.

I tried myself to tweak and test. And I got it. I am using POST method though. Please try the idea with GET method. Here is the idea:

Append the array index value within square brackets to the Post/Get variable name for array. Do this for each array element.

The part "var parameters="&Name[0]="+namevalue1+"&Name[1]="+namevalue2;" of the following script would give you a hint.

This is the test JS, I used (Again this uses POST method not 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;
 }

This worked for me. Sorry for the formatting and incomplete code. I meant to give a direction. Google reault websites couldn't give a solution. Hope you find this useful.