0

I am creating one website in php. and i am using jquery ajax to pass data from one page to another. and that is general process for all pages.

my javascript function is :

function add_data()
{       
  var searchinOn = mainObjectAddForm['available_add_fields'].split(","); 
  var whereOn="{";
  var where = "";
  for (i=0;i<searchinOn.length;i++)
  {
    var keyValue= searchinOn[i];
    where+=getAddData(mainObjectAddForm[keyValue]['name'],mainObjectAddForm[keyValue]['text'],mainObjectAddForm[keyValue]['datatype'],mainObjectAddForm[keyValue]['data'],keyValue)  

  }  

  whereOn+= where.substring(0,where.length-1)+"}";

  $.ajax({
    type:'POST',
    data:whereOn,
    url:siteurl + "add/",
     dataType:'json',
    success:function(data)
    {
    }
  });
 }



 function getAddData(name,text,datatype,data,keyValue)
 {  

 var control="";
 var value1="";
 var value2="";
switch(datatype)
{
    case "text":                         
        control +=  "'"+name+"':'"+trim($('#add_form #'+name).val())+"'";
        break;
    case "password":
        control +=  "'"+name+"':'"+trim($('#add_form #'+name).val())+"'";           
        break;      
    case "label":
        control +=  "'"+name+"':'"+trim($('#add_form #'+name).val())+"'";           
        break;          
    case "textarea":
        control +=  "'"+name+"':'"+trim($('#add_form #'+name).val())+"'";           
        break;
}
if (trim(control)=="") return "";
else return control + ",";
}

but on php page i am not getting all values. Its coming as one string in post variable.

like

 [{'field1':'abc','field2':'pqr','field3':'xyz'}] => 

but i want like this :

Array
{
[field1] => abc
[field2] => pqr
[field3] => xyz
}

and i know the problem that the problem is the ajax data is passing as one string because the '{' and '}' are in whereOn string. but if i add that in ajax call than also its same problem.

can anyone help me to solve it ?

4

2 に答える 2

2

いくつかの提案:

  1. JSONを手動で作成しないでください。JSON.stringify(..)最新のすべてのブラウザーがサポートする優れた
  2. POST 本文で生の JSON を送信しています。ヘッダーを設定しないのはなぜContent-Type: application/jsonですか?
  3. POST 本文はパーセンタイル エンコードされていません。$_POSTしたがって、配列を使用しても意味がありません。あなたがしなければならないことはfile_get_contents('php://input')、JSON-String を取得するために POST 本文全体を読むことです。次に、それをjson_decode(..)通常の方法で使用できる PHP オブジェクトに変換するために使用できます。

    $postBody = file_get_contents('php://input');
    var_dump($postBody);
    $jsonObj = json_decode($postBody);
    var_dump(jsonObj);
    
于 2013-04-15T04:11:04.723 に答える
0

手動で json を構築しようとしている場合は、http://json.orgをご覧ください。私はそれに反対し、jsonを使用することをお勧めします。
代わりに application/x-www-form-urlencoded (キーと値のペア) を使用します

function add_data()
{       
  var searchinOn = mainObjectAddForm['available_add_fields'].split(","); 
  var whereOn={};
  var where = "";
  for (i=0;i<searchinOn.length;i++)
  {
    var keyValue= searchinOn[i];
    getAddData(mainObjectAddForm[keyValue]['name'],mainObjectAddForm[keyValue]['text'],mainObjectAddForm[keyValue]['datatype'],mainObjectAddForm[keyValue]['data'],keyValue,whereOn)  

  }  

  $.ajax({
    type:'POST',
    data:whereOn,
    url:siteurl + "add/",
     dataType:'json',
    success:function(data)
    {
    }
  });
 }



function getAddData(name,text,datatype,data,keyValue,whereOn)
{  
 switch(datatype)
 {
    case "text":                         
        whereOn[name] = trim($('#add_form #'+name).val());
        break;
    case "password":
        whereOn[name] = trim($('#add_form #'+name).val());           
        break;      
    case "label":
        whereOn[name] = trim($('#add_form #'+name).val());           
        break;          
    case "textarea":
        whereOn[name] = trim($('#add_form #'+name).val());           
        break;
 }

}
于 2013-04-15T04:10:56.817 に答える