在追加到url之前需要逃离空白区域

时间:2011-05-31 21:19:32

标签: jquery

这是我需要它的字符串的参数部分:

?parentId=PRICE&childId=%20LIST

这是参数部分(注意缺少%20):

?parentId=PRICE&childId=LIST

以下是从两个选择框(#parentCodes和#childCodes)收集数据的功能:

            function ajaxCodeDetails(){
                $.getJSON(
                "manage-inventory-codes_codeDetails",
                {'parentId': $("#parentCodes").val(),
                    'childId': $("#childCodes").val()},
                renderDetails
            );
            }

如何在发送请求之前转义val()返回的结果?

5 个答案:

答案 0 :(得分:3)

这不是jQuery的问题,而是表单。在选项的文本中似乎忽略了前导和尾随空格(显然,这是浏览器的正常行为,见下文):

<select name="foo">
    <option> space</option>
    <option>space </option>
</select

DEMO

但如果将它们设置为value s:

,则它可以正常工作
<select name="foo">
    <option value=" space"> space</option>
    <option value="space ">space </option>
</select>

DEMO


HTML规范有一个关于文本的有趣章节in particular about white space。有说:

  

为了避免SGML line break rules的问题以及现有实现之间的不一致,作者不应该依赖用户代理在开始标记之后立即或在结束标记之前立即渲染空白。因此,作者,特别是创作工具,应该写:

  <P>We offer free <A>technical support</A> for subscribers.</P>
     

而不是:

  <P>We offer free<A> technical support </A>for subscribers.</P>

因此,似乎大多数浏览器都遵守此规则并忽略这些空格。

答案 1 :(得分:1)

您可以使用内置的encodeURI()功能...

{'parentId': encodeUri($"#parentCodes").val(), 

答案 2 :(得分:1)

HTML忽略<option>标记内的前导和尾随空格。将前导和尾随空格替换为&nbsp;,以便浏览器将其正确解释为空格。您将要在服务器上执行此操作。根据语言的不同,可能会有一种方法可以为您进行此转换。

答案 3 :(得分:0)

试试这个:

function ajaxCodeDetails(){                 
    $.getJSON(                 
        "manage-inventory-codes_codeDetails",{
            'parentId': $("#parentCodes").val().replace(/^\s+/g, ""),
            'childId': $("#childCodes").val().replace(/^\s+/g, "")
        },                 
        renderDetails             
    );             
} 

答案 4 :(得分:0)

您无需对任何内容进行URL编码。 jQuery将负责这一点。 %20表示网址编码空间。因此,只需在文本框中放置一个空格即可正确处理。你的代码非常好。