GVKun编程网logo

使用 jquery 进行 POST,如何正确提供 'data' 参数?

10

对于使用jquery进行POST,如何正确提供'data'参数?感兴趣的读者,本文将提供您所需要的所有信息,并且为您提供关于Asp.net下使用JqueryAjax传送和接收DataTable的代码_

对于使用 jquery 进行 POST,如何正确提供 'data' 参数?感兴趣的读者,本文将提供您所需要的所有信息,并且为您提供关于Asp.net下使用Jquery Ajax传送和接收DataTable的代码_jquery、bootstrap data与jquery .data_jquery、html5的自定义data-*属性和jquery的data()方法的使用示例_jquery、jquery datatable 使用api进行搜索的宝贵知识。

本文目录一览:

使用 jquery 进行 POST,如何正确提供 'data' 参数?

使用 jquery 进行 POST,如何正确提供 'data' 参数?

我想以 POST 的形式进行 ajax 调用,它将发送到我的 servlet。我想发送参数化数据,如下所示:

var mydata = ''param0=some_text&param1=some_more_text'';

我将其作为我的 jquery ajax() 调用的“数据”参数提供。所以这应该插入到 POST 的正文中,对吧?(我的意思是,没有附加到我的 ‘mysite/save’ 网址?):

$.ajax({    url: ''mysite/save'',    type: ''POST'',    data: mydata});

它似乎工作正常。在我的 servlet 中,我只是转储了所有接收到的参数,并且我看到它们都很好地通过了:

private void printParams(HttpServletRequest req) {    Enumeration paramNames = req.getParameterNames();    while (paramNames.hasMoreElements()) {         // print each param key/val here.    }}

另外,我应该在使用前手动对我的数据字符串进行 url 编码,对吗?像:

var mydata = ''param0='' + urlencode(''hi there!'');mydata += ''&param1='' + urlencode(''blah blah'');mydata += ''%param2='' + urlencode(''we get it'');

谢谢!

答案1

小编典典

一种更简单的方法是将data属性作为对象提供,如下所示:

$.ajax({  url: ''mysite/save'',  type: ''POST'',  data: { param0:''hi there!'', param1:''blah blah'', param2:''we get it'' }});

否则,是的,您应该对其进行编码,因为任何带有&例如的东西都会很快搞砸。无论如何,在我看来,将它作为对象提供代表了一种更清晰/更简单的方法。

您还可以将其隔开并从其他内联位置检索属性,如下所示:

$.ajax({  url: ''mysite/save'',  type: ''POST'',  data: {           param0: $(''#textbox0'').val(),           param1: $(''#textbox1'').val(),           param2: $(''#textbox2'').val()        }});

编辑:如果您对 jQuery 如何在内部进行这种编码感到好奇,它正在使用$.param()(您也可以直接使用)将对象编码为一个字符串

Asp.net下使用Jquery Ajax传送和接收DataTable的代码_jquery

Asp.net下使用Jquery Ajax传送和接收DataTable的代码_jquery

服务器再把GridView反构造成DataTable, 再给DataTable增加一行之后,绑定到GridView,然后发回客户端...
能不能简单一点呢?
在使用Ajax数据请求数据,通常都是简单格式,比如String,信息量较少。当然也可以请求回XML,但是XML数据冗余多,取到客户端处理比json麻烦的多。
能不能简单一点呢?
上面这些问题,如果DataTable与JSON类型可以方便的相互转换,都可以迎刃而解了。
优点:1)避免不必要的回传;
2)精简异步请求数据的大小 ;
3)解决数据量较大时,数据发送与接收繁琐的问题。
既然好处这么多,我们上代码吧。
前台代码:

复制代码 代码如下:



















后台代码:
///
复制代码 代码如下:

/// 页面加载时
///
///
///
protected void Page_Load(object sender, EventArgs e)
{
//判断是否异步请求
if (Request.QueryString["ajax"] == "1")
{
ProcessRequest();
}
}
///
/// 处理异步请求
///

private void ProcessRequest()
{
Response.ContentType = "text/html";
string json = Request.Form["json"];
//反序列化DataTable
DataTable newdtb = Json2Dtb(json);
//序列化DataTable为JSON
string back = Dtb2Json(newdtb);
Response.Write(back);
Response.End();
}
///
/// DataTable转Json
///

///
///
private string Dtb2Json(DataTable dtb)
{
JavaScriptSerializer jss = new JavaScriptSerializer();
ArrayList dic = new ArrayList();
foreach (DataRow row in dtb.Rows)
{
Dictionary drow = new Dictionary();
foreach (DataColumn col in dtb.Columns)
{
drow.Add(col.ColumnName, row[col.ColumnName]);
}
dic.Add(drow);
}
return jss.Serialize(dic);
}
///
/// Json转DataTable
///

///
///
private DataTable Json2Dtb(string json)
{
JavaScriptSerializer jss = new JavaScriptSerializer();
ArrayList dic = jss.Deserialize(json);
DataTable dtb = new DataTable();
if (dic.Count > 0)
{
foreach (Dictionary drow in dic)
{
if (dtb.Columns.Count == 0)
{
foreach (string key in drow.Keys)
{
dtb.Columns.Add(key, drow[key].GetType());
}
}
DataRow row = dtb.NewRow();
foreach (string key in drow.Keys)
{
row[key] = drow[key];
}
dtb.Rows.Add(row);
}
}
return dtb;
}

再附一个下载文件,觉得有用的可以下载看看
json.zip

bootstrap data与jquery .data_jquery

bootstrap data与jquery .data_jquery

jquery官网对.data函数描述是:在匹配元素上存储任意相关数据 或 返回匹配的元素集合中的第一个元素的给定名称的数据存储的值。

存储键值(key/value):

  $("body").data("foo", 52);
  $("body").data("bar", { myType: "test", count: 40 });
  $("body").data({ baz: [ 1, 2, 3 ] });
登录后复制


取键值

  $("body").data("foo"); // 52
  $("body").data(); // { foo: 52, bar: { myType: "test", count: 40 }, baz: [ 1, 2, 3 ] }
登录后复制

以上这些都很容易掌握和理解,今天在看bootstrap 的弹窗掩码的时候遇到了这样一段代码让我产生了疑惑

 $(document).on(''click.modal.data-api'', ''[daTa-toggle="modal"]'', function (e) {
  alert($(this).data().toggle) //这行是我加入的代码 打印的值是modal
  var $this = $(this)
   , href = $this.attr(''href'')
   , $target = $($this.attr(''data-target'') || (href && href.replace(/.*(?=#[^\s]+$)/, ''''))) //strip for ie7
   , option = $target.data(''modal'') ? ''toggle'' : $.extend({ remote:!/#/.test(href) && href }, $target.data(), $this.data())  
  e.preventDefault()
  $target
   .modal(option)
   .one(''hide'', function () {
    $this.focus()
   })
 })

登录后复制

代码中的三目运算符 $target.data(''modal'')?''toggle'' : $.extend({ remote:!/#/.test(href) && href }, $target.data(), $this.data())

是判断窗口是否是第一次渲染 。第一次渲染窗口的时候执行了

option = $.extend({ remote:!/#/.test(href) && href }, $target.data(), $this.data()) //结果是 option= {remote: false,toggle: "modal"}
登录后复制

$target.data()是空对象{} ,$this.data()值是{toggle: "modal"} 。这里不经要问 $this.data() 的返回值哪来的

点击下载“修复打印机驱动工具”;

看了下html代码,刚好与被绑定click方法的dom对象的属性值一样,以下是被绑定的dom对象的html代码

Launch demo modal

我加入的代码alert($(this).data().toggle)打印的值是modal ,所以这里只能是jquery做的文章,于是我研究了jquery的源码发现果然真是 !

以下是jQuery.fn.data函数中的部分代码 , 当key未定义也就是调用 .data() 未传参数时会将属性名为data-开头的键值对存入匹配元素上。

本例中Launch demo modal,将{toggle:"modal"}键值对存入

有兴趣的同学可以去试调以下jquery代码

    // Gets all values
    if ( key === undefined ) {
      if ( this.length ) {
        data = jQuery.data( elem );
        if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
          attrs = elem.attributes;
          for ( ; i < attrs.length; i++ ) {
            name = attrs[i].name;
            if ( name.indexOf("data-") === 0 ) {
              name = jQuery.camelCase( name.slice(5) );

              dataAttr( elem, name, data[ name ] );
            }
          }
          jQuery._data( elem, "parsedAttrs", true );
        }
      }
      return data;
    }

登录后复制

我再去详细阅读了jquery官网的帮助文档有如下一段话
HTML5 data-* Attributes(HTML5 data-* 属性)
从jQuery 1.4.3起, HTML 5 data- 属性 将自动被引用到jQuery的数据对象中。嵌入式破折号处理属性( attributes)的方式在 jQuery 1.6 中已经改变,以使之符合W3C HTML5 规范.

举个例子, 给定下面的HTML:

<div data-role="page" data-last-value="43" data-hidden="true" data-options=''{"name":"John"}''></div>
登录后复制

下面所有的 jQuery 代码都能运行。

$("div").data("role") === "page";
$("div").data("lastValue") === 43;
$("div").data("hidden") === true;
$("div").data("options").name === "John"; 
登录后复制

html5的自定义data-*属性和jquery的data()方法的使用示例_jquery

html5的自定义data-*属性和jquery的data()方法的使用示例_jquery

人们总喜欢往HTML标签上添加自定义属性来存储和操作数据。但这样做的问题是,你不知道将来会不会有其它脚本把你的自定义属性给重置掉,此外,你这样做也会导致html语法上不符合Html规范,以及一些其它副作用。这就是为什么在HTML5规范里增加了一个自定义data属性,你可以拿它做很多有用的事情。

你可以去读一下HTML5的详细规范,但这个自定义data属性的用法非常的简单,就是你可以往HTML标签上添加任意以 "data-"开头的属性,这些属性页面上是不显示的,它不会影响到你的页面布局和风格,但它却是可读可写的。

下面的一个代码片段是一个有效的HTML5标记:

复制代码 代码如下:

data-myid="3e4ae6c4e">Some awesome data


可是,怎么来读取这些数据呢?你当然可以遍历页面元素来读取你想要的属性,但jquery已经内置了方法来操作这些属性。使用jQuery的.data()方法来访问这些"data-*" 属性。其中一个方法就是 .data(obj),这个方法是在 jQuery1.4.3版本后出现的,它能返回相应的data属性。

举个例子,你可以用下面的写法读取 data-myid属性值:
复制代码 代码如下:

var myid= jQuery("#awesome").data(''myid'');
console.log(myid);

你还可以在"data-*" 属性里使用json语法,例如,如果你写出下面的html:
复制代码 代码如下:



你可以通过js直接访问这个数据,通过json的key值,你能得到相应的value:
复制代码 代码如下:

var gameStatus= jQuery("#awesome-json").data(''awesome'').game;
console.log(gameStatus);

你也可以通过.data(key,value)方法直接给"data-*" 属性赋值。一个重要的你要注意的事情是,这些"data-*" 属性应该和它所在的元素有一定的关联,不要把它当成存放任意东西的存储工具。

补充:尽管"data-*" 是HTML5才出现的属性,但jquery是通用的,所以,在非HTML5的页面或浏览器里,你仍然可以使用.data(obj)方法来操作"data-*" 数据

jquery datatable 使用api进行搜索

jquery datatable 使用api进行搜索

$(''#table'').DataTable({
"searching": true,
"paging": true,
"iDisplayLength": 2,
"bLengthChange": false,
"info": false,
"destroy": true,
"AutoWidth": true,
"colReorder": true,
"responsive": false,
"sDom" : ''"top"i'', //打开搜索功能的前提下,去掉搜索框
})
 
//search第二个参数true打开正则搜索 false不使用正则
$("#table").DataTable().search(status_str,true).draw();
//也可以指定具体某一列的值进行搜索
$("#table").DataTable().columns(4).search(status_str,true).draw();

关于使用 jquery 进行 POST,如何正确提供 'data' 参数?的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于Asp.net下使用Jquery Ajax传送和接收DataTable的代码_jquery、bootstrap data与jquery .data_jquery、html5的自定义data-*属性和jquery的data()方法的使用示例_jquery、jquery datatable 使用api进行搜索等相关知识的信息别忘了在本站进行查找喔。

本文标签: