【问题标题】:php parsing jQuery form serialize wrong wayphp解析jQuery表单序列化错误的方式
【发布时间】:2012-04-20 21:42:27
【问题描述】:

我有一个问题...

这些是我的一些 html 表单元素的名称: 名称="密码" name="meta[naziv_firme]"

这是我的 jQuery

var data = {action: 'edit', form: $('input', 'form#edit-klijent-form').serialize()}

console.log(data);

$.get('/index.php/admin-ajax', data, 
 function(response){
  // Success
  $('div#edit-klijent-div,.tipsy').hide();
  $('div#klijent-edit-success').show();
 });

Console.log 给了我结果:

action  edit
form    userID=12&password=&password-match=&email=test15%5Bmeta%5Bnaziv_firme%5D=test15&meta%5Bkontakt_osoba%5D=test156&meta%5Bkontakt_telefon%5D=test157&meta%5Bkontakt_email%5D=test158

所以一切看起来都不错!

现在在 PHP 中我有 var_dump($_GET);结果是:

string(165) "userID=12&password;=&password;-match=&email=test15&meta;[naziv_firme]=test15&meta;[kontakt_osoba]=test156&meta;[kontakt_telefon]=test157&meta;[kontakt_email]=test158"

为什么 PHP 放 ;密码后,在 &meta;[... ??

还有什么想法?我做错了什么?

谢谢!

【问题讨论】:

  • 能否请您向我们展示来自 PHP 的请求的查询字符串?您可以通过以下方式获得它:echo $_SERVER['QUERY_STRING'];.
  • action=edit&form=userID%3D12%26password%3D%26password-match%3D%26email%3Dtest15%26meta%255Bnaziv_firme%255D%3Dtest15%26meta%255Bkontakt_osoba%255D%3Dtest156%26meta_telionak% 255D%3Dtest157%26meta%255Bkontakt_email%255D%3Dtest158
  • 能否粘贴您的 HTML 表单?
  • .serialize() 旨在为您提供一个定义参数的字符串,而不是一个用作作为参数值的字符串。

标签: php jquery ajax serialization xhtml


【解决方案1】:

从以下位置更改您的代码:

var data = {action: 'edit', form: $('input', 'form#edit-klijent-form').serialize()}

收件人:

var data = "action=edit&" + $('input', 'form#edit-klijent-form').serialize();

我认为这是您想要实现的目标。

【讨论】:

    【解决方案2】:

    在您的 HTML 表单元素中,添加:

    <input type="hidden" name="action" value="edit">
    

    并改变这一行:

    var data = {action: 'edit', form: $('input', 'form#edit-klijent-form').serialize()}
    

    进入这个:

    var data = $('input', 'form#edit-klijent-form').serialize();
    

    由于我没有您的 HTML 或服务器配置,因此无法真正测试它,但我认为它应该可以工作。

    更新:

    为了澄清@AnthonyGrist 上面的评论,让我们观察一下 serialize 的作用:

    <form>
      <input type="text" name="input1" value="foo">
      <input type="text" name="input2" value="bar">
    </form>
    
    <script>
      var data = $('form input').serialize();
      // data is now: 'input1=foo&input2=bar'
    </script>
    

    如果您将上面返回的值分配给查询参数(PHP 使用 $_GET 访问该参数),您基本上是在告诉 PHP $_GET['form'] 等于上面的字符串,这不是您想要的。 PHP 不会解析 $_GET['form'] 的内容给你 $_GET['input1']... serialize() 返回的值应该直接用作 $.get() 的第二个参数。

    【讨论】:

    • 是的,我知道它的工作方式......但这是一个 jQuery 错误还是?
    • @user854993 错误在于您尝试使用.serialize() 的方式。它不应该用作参数的值。
    • 感谢大家的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    • 2010-12-20
    • 1970-01-01
    • 2016-12-01
    • 1970-01-01
    相关资源
    最近更新 更多