在这种情况下,jquery ajax没有正确传递数据

时间:2013-04-15 03:44:05

标签: php jquery ajax

我在php中创建一个网站。我正在使用jquery ajax将数据从一个页面传递到另一个页面。 这是所有页面的一般过程。

我的javascript函数是:

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 + ",";
}

但在php页面上我没有得到所有的值。它在post变量中作为一个字符串出现。

喜欢

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

但我想这样:

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

我知道问题是ajax数据作为一个字符串传递,因为'{'和'}'在whereOn字符串中。 但是如果我在ajax调用中添加它而不是同样的问题。

任何人都可以帮我解决吗?

2 个答案:

答案 0 :(得分:2)

一些建议:

  1. 从不 永远手工构建JSON。你有一个很好的JSON.stringify(..)功能,所有现代浏览器都支持它。
  2. 您正在POST正文中发送原始JSON。为什么不设置标题Content-Type: application/json
  3. POST正文 NOT 百分位编码。因此使用$_POST数组没有意义。您需要做的是使用file_get_contents('php://input')读取整个POST主体以获取JSON-String。然后,您可以使用json_decode(..)将其转换为可以通常方式使用的PHP对象。

    $postBody = file_get_contents('php://input');
    var_dump($postBody);
    $jsonObj = json_decode($postBody);
    var_dump(jsonObj);
    

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

}