2011-05-31 79 views
0

这是字符串的参数部分,因为我需要它之前逃脱空白:需要追加到URL

?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()返回的结果?

+0

默认情况下,jQuery正在转义数据。如果你没有按照你想要的方式得到它,它似乎也在修整数据。 – 2011-05-31 21:23:37

+0

是的,它正在修剪“”的领先空间,这是不可接受的。 – Quaternion 2011-05-31 21:27:54

+0

我必须修改我的评论。 jQuery不参与这个请看我的答案。 – 2011-05-31 21:35:42

回答

3

这不是与jQuery但与形式的问题。看来,开头和结尾的空格在该选项的文本被忽略(显然,这是浏览器的正常行为,见下文):

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

DEMO

但它的作品,如果它们被设置为value小号:

<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> 

如此看来,大多数浏览器遵守这一规则,而忽略那些空间。

+0

由于数据是用JSON获得的,我可以通过准备选项的功能简单地添加解决所有问题的必需属性。善于发现我的疏忽。 – Quaternion 2011-05-31 21:56:45

0

试试这个:

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

您不需要编码URL什么。 jQuery会照顾到这一点。 %20表示一个url编码空间。所以简单地在你的文本框中放一个空格,它将被正确处理。你的代码非常好。

+0

它来自选择框。目前它没有照顾它。 – Quaternion 2011-05-31 21:24:46

+0

@Quaternion,这可能是由于你的组合框的值如何。你的jQuery代码很好,不应该被触及。这是使用'$ .getJSON'函数发送参数的正确方法。如果你没有得到想要的结果,*希望的*违反了HTTP规范或者问题在其他地方。 – 2011-05-31 21:28:02

+0

Firebug显示选项值包含具有前导空格的单词列表。如果我追加第一个查询字符串,那么我得到所需的结果,如果我提交第二个,那么我得到错误的结果......显然它在HTTP规范内。 – Quaternion 2011-05-31 21:34:15

1

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

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

+1了解何时使用js over jquery。当你不能让jquery为你处理编码时,这是最好的方法。 – BumbleB2na 2011-05-31 21:27:53

1

HTML忽略<option>标记中的前导和尾随空白。用&nbsp;替换前导空格和尾随空格,以便浏览器将其正确解释为空格。你会想在服务器上这样做。根据不同的语言,可能有一种方法可以为你做这种转换。

+0

该帐户的解决方案将工作,但因为我得到JSON返回felix klings解决方案是一个更接近。感谢您的帮助。 – Quaternion 2011-05-31 21:54:58