【问题标题】:JQuery - Ajax: encodeUriComponent not working (EncodeUri does)JQuery - Ajax:encodeUriComponent 不工作(EncodeUri 可以)
【发布时间】:2014-05-09 07:38:17
【问题描述】:

在一个小的 asp.net webclient 中,我有以下 Ajax 调用。

$.ajax({
    type: "GET",
    url: "Search.aspx?action=GetDocumentInfoByChronicleId&" + querystring
})
.success(function (msg) {
    $("#documentcontent").html(msg);
})

querystring 适用于默认字符,但在使用特殊字符时似乎不起作用(参见下面的示例)

objectId=09028139800c59e3&Db=DIV_Firm <== Works
objectId=090281>>773c5983&Db=DIV_Firm <== Non Working

基于this(以及更多关于SO的帖子,我选择如下更改我的ajax调用(EncodeUriComponent)。但似乎没有一个有效(即使使用原始查询字符串 )。

有人能指出我到底做错了什么吗?

$.ajax({
    type: "GET",
    url: "Search.aspx?action=GetDocumentInfoByChronicleId&" + encodeURIComponent(querystring)
})
.success(function (msg) {
    $("#documentcontent").html(msg);
})

注意: EncodeUri 似乎在工作。但我更喜欢使用EncodeUriComponent

【问题讨论】:

  • 你从哪里得到查询字符串?有一种内置的方法可以在 $.ajax 中传递数据,不需要查询字符串。
  • Querystring 是我自己构建的。我需要根据用户输入将数据发送到服务器。 “有一种内置的方法可以在 $.ajax 中传递数据”是什么意思?您的意思是使用 ´{data: ... }?

标签: javascript jquery asp.net ajax urlencode


【解决方案1】:

如果在进行 ajax 调用时有一些方法可以传递数据,那会不会容易很多,哦等等,有,使用 data 选项

$.ajax({
    type : "GET",
    url  : "Search.aspx",
    data : {
        action   : 'GetDocumentInfoByChronicleId',
        objectId : '09028139800c59e3',
        Db       : 'DIV_Firm'
    }
});

jQuery 将为您创建查询字符串并适当地对其进行转义

作为旁注,encodeURI 正是您应该用来编码包含?&amp; 等的查询字符串,因为encodeUriComponent 也会转义这些字符,使查询字符串无效,但该方法上面发布的内容要简单得多,因为您根本不必担心编码。

【讨论】:

  • 会这么直接试试!我会尽快回复您。
  • 甜蜜!有用!谢啦!我不知道“$ .ajax - 数据会自动转义”:) 只要 SO 允许我,我就会批准答案
  • 它确实可以,数组、对象、字符串和任何可以直接传递给 $.ajax 的东西,jQuery 会尝试理解它并创建一个有效的查询字符串。
  • 我不知道 jQuery 是否在某一时刻没有自动执行此操作,但有很多关于此的 S/O 问题的答案指导用户对值进行编码并通过 data: { .. } 传递它们/跨度>
  • @JoeBrockhaus - jQuery 已经做了很多年了,如果你给它传递一个值,它会将它转换成form/www-endoded 数据,但是有些人的控制器需要在后端使用 JSON,然后你'd 必须在发送之前设置一个内容标题并将对象字符串化。只要服务器需要一个表单,这就是要走的路。
猜你喜欢
  • 1970-01-01
  • 2014-04-21
  • 2013-03-29
  • 2017-02-06
  • 2019-01-12
  • 2010-11-25
  • 1970-01-01
  • 2014-05-04
  • 2012-11-03
相关资源
最近更新 更多