使用内置jQuery以默认设置

时间:2015-10-11 16:14:01

标签: javascript jquery ajax

源代码:

<?php
    if ($_SERVER['REQUEST_METHOD'] == 'POST'){
        header('Content-Type: application/json');
        echo json_encode($_POST);
        exit(0);
    }
?>

<html>
<head>
    <title>Web Test</title>
    <script src="js/jquery.min.js"></script>
</head>
<body>
    <form id="formTest">
      <input name="username" value="admin" />
      <input name="password" type="password" value="admin_pass" />
    </form>
    <script type="text/javascript">
      $.ajaxSetup({
        data: {role: 'admin'} //(I)
      });

      //Ajax to current page
      $.ajax('test', {
        method: 'post',
        data: $('#formTest').serialize()  //(II)
        ,success: function(res){
          console.log(res);
        }
      });
    </script>
</body>
</html>

我想通过jQuery AJAX发送表单数据,并将默认数据(role=admin)附加到每个AJAX请求中,但它不能按我的意愿工作。

我采取如下选项:

  • data: {role: 'admin'} //(I)(默认数据)
    data: $('#formTest').serialize() //(II)(表单数据)
    (这与上面的源代码完全相同)
    =&GT;来自控制台的结果:{username: "admin", password: "admin_pass"}
    所以,这种方法似乎不起作用
  • data: 'role=admin' //(I)
    data: $('#formTest').serialize() //(II)
    (相同的网址编码格式)
    =&GT;与上述相同
  • data: [{name: 'role', value: 'admin'}] //(I)
    data: $('#formTest').serializeArray() //(II)
    (相同的serializeArray格式)
    =&GT;与上述相同
  • data: {role: 'admin'} //(I)
    data: {username: 'admin', password: 'admin_pass'} //(II)
    =&GT;这种方法有效!但是没有内置 jQuery方法将表单数据转换为这样的对象。我必须使用&#34; thirt-party&#34;解决方案使用$('#formTest').serializeObject()(来自here)。


那么,有没有办法只用jQuery来解决这个问题呢? JQuery提供了ajaxSetupserialize/serializeArray方法,但它们似乎并不能很好地相互配合。

1 个答案:

答案 0 :(得分:2)

为什么不附加带有理想数据的变量?

<html>
<head>
    <title>Web Test</title>
    <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
    <form id="formTest">
      <input name="username" value="admin" />
      <input name="password" type="password" value="admin_pass" />
    </form>
    <script>

    var theRole = '&role=admin';

    //Ajax to current page
    $.ajax('test.php', {
        method: 'post',
        data: $('#formTest').serialize() + theRole,
        success: function(res) {
            console.log(res);
        }
    });
    </script>
</body>
</html>

修改

另一种方法,使用ajaxSetup()

<html>
<head>
    <title>Web Test</title>
    <script src="http://code.jquery.com/jquery-latest.js"></script>
</head>
<body>
    <form id="formTest">
      <input name="username" value="admin" />
      <input name="password" type="password" value="admin_pass" />
    </form>
    <script>
    $.ajaxSetup({ data: {role: 'admin'} });

    //Ajax to current page
    $.ajax('test.php?' + $('#formTest').serialize(), {
        method: 'post',
        success: function(res) {
            console.log(res);
        }
    });
    </script>
</body>
</html>

然后必须使用json_encode($ _REQUEST)。

<?php

if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
    header( 'Content-Type: application/json' );
    echo json_encode( $_REQUEST );
}

?>