需要有关关联数组的帮助

时间:2009-09-21 00:05:07

标签: php jquery ajax

我的大脑在编码10小时后就被炸了,所以我需要一些帮助。

我使用以下函数从表单提交中检索数据(在处理数据,验证输入等之前):

  // All form fields are identified by '[id]_[name]', where 'id' is the 
  // identifier of the form type. Eg. brand, store etc.
  // The field identifier we want to return is just the name and not the id.
  public function getFormData() {
    $formData = array();
    foreach ($_POST as $key => $value) {
      $name = preg_replace('!.*_!', '', $key);
      if (is_array($value)) {
        $formData[$name] = implode(',', $value);
      } else {
        $formData[$name] = $value;
      }
    }
    return $formData;
  }    

现在我正在使用AJAX提交表单,所以我不能再使用这个功能了。

我的$ _POST ['formData']字符串看起来像这样(短版本):

"store_name=My+new+store&store_street1=Some+address&store_zipcode=1188"

我的目标是能够执行以下代码:

echo $formData['name'] //Displays 'Some address'

我的jQuery代码如下所示:

  function processRegistration()
  {

    var formData = jQuery('#registerStore form').serialize();

    jQuery.post("mypath/jquery_bll.php", { instance: 'processRegistration', formData : formData },
      function(data)
      {
          alert('some test data here');
      },"json");

如何更改我的函数以处理来自Ajax调用的数据?

4 个答案:

答案 0 :(得分:3)

如果您使用的是$.post(),则没有区别。这只是一个POST请求。

答案 1 :(得分:1)

我注意到你的使用:

jQuery.post("mypath/jquery_bll.php", { instance: 'processRegistration', formData : formData },

在你的代码中最有可能输出:

instance=processRegistration&formData=field1=value1&field2=value2

那么php脚本将获得的是:

$_POST = array(
  'instance'=>'processRegistration',
  'formData'=>'field1=value1',
  'field2'=>'value2
);

编辑:这是因为序列化对象将创建一个准备发送的查询字符串,然后将其放入数据参数的对象中。
data参数接受来自jquery.fn.serialize之类的键/值对象或查询字符串 http://docs.jquery.com/Ajax/jQuery.post
所以也许你改变这一行:

jQuery.post("mypath/jquery_bll.php", { instance: 'processRegistration', formData : formData },

.. to ..

jQuery.post("mypath/jquery_bll.php", formData + '&instance=processRegistration',

会起作用

答案 2 :(得分:0)

ajax调用和来自浏览器的常规调用之间没有功能差异。

所以,回答......

$formData = getFormData();
echo $formData['name'];

答案 3 :(得分:0)

如果您愿意使用插件,可以使用这个小插件,尽管它在jquery插件库中不可用

$.params2json = function(d) {
    if (d.constructor != Array) {
        return d;
    }
    var data={};
    for(var i=0;i<d.length;i++) {
        if (typeof data[d[i].name] != 'undefined') {
            if (data[d[i].name].constructor!= Array) {
                data[d[i].name]=[data[d[i].name],d[i].value];
            } else {
                data[d[i].name].push(d[i].value);
            }
        } else {
            data[d[i].name]=d[i].value;
        }
    }
    return data;
};

您可以在插件中使用以下代码:

function processRegistration()
{
  var formData = $.params2json($('#registerStore form').serializeArray());
  formData.instance = 'processRegistration';
  $.post('mypath/jquery_bll.php', formData,
    function(data) {
      alert('some test data here');
    }, "json");
  });
}