【问题标题】:How to send an object to PHP如何将对象发送到 PHP
【发布时间】:2014-10-31 00:11:45
【问题描述】:

我正在尝试通过 ajax 将数据从客户端 (javascript) 发送到服务器 (php)。 我有一个看起来像这样的对象:

sinfo={
            topic_title:title,
            topic_id: tid,
            section_name:section_name,
            section_id: fid,
            circuito: "fc",
            from_mid:mid,
            sito:site,
            st: st,
            tags:{"m4148305":{"post_id":987649,"from_id":1}}
        }

我想将该对象传递给服务器。 我知道的唯一方法是使用 JQuery,所以我尝试了类似的方法:

$.post(baseurl+"/server/?act=post",sinfo,function(e)
               {
            sessionStorage.PixelTagSystemTagRequest="false";
        });

它在 Chrome 和 Safari 上运行良好。但是 Firefox 显示一个奇怪的错误,例如:

在 HTMLElement 上调用事件 .click() 不实现接口

解决方案应该很简单:更新 JQuery,不幸的是我不允许这样做。 所以我尝试了一个 Pure JS 解决方案

var fd = new FormData(), lol, xml;
        for(lol in sinfo)
        {
            fd.append(lol,sinfo[lol]);
            //alert(lol+" = "+sinfo[lol]);
        }
        xml = new XMLHttpRequest();
        xml.open("POST",baseurl+"/server/?act=post");
        xml.onreadystatechange=function()
        {
            if(xml.readyState==4)
            {
                sessionStorage.PixelTagSystemTagRequest="false";
                alert(xml.responseText);
            }
        };
        xml.send(fd);

但是 sinfo.tags 仍然是一个对象,我不知道如何将该属性传递给服务器。

P.s:我试图避免对对象进行字符串化(在 JSON 中),所以我不必更改 php 代码。

【问题讨论】:

  • 是否存在不能更改 PHP 代码的特定限制因素?

标签: javascript php jquery arrays ajax


【解决方案1】:

如果要使用FormData,可以添加如下代码:

for(lol in sinfo)
{
    if (lol == "tags") {
        for (lok in sinfo[lol]) {
            fd.append("tags[" + lok + "]", sinfo[lol][lok];
        }
    } else {
        fd.append(lol,sinfo[lol]);
    }
}

【讨论】:

  • 阅读问题就可以了。 "P.s: I'm trying to avoid to stringify the object (in JSON), so i don't have to change the php code."
  • 好吧,我删除了 JSON3,请使用那个代码。它将在 FormData 中工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-05
  • 1970-01-01
  • 2015-07-07
  • 2014-07-08
  • 1970-01-01
  • 2021-12-31
  • 2020-09-26
相关资源
最近更新 更多