Javascript评估HTML特殊字符,打破AJAX结果中的函数调用

时间:2012-04-17 09:27:14

标签: php javascript ajax forms

我一直致力于为我正在构建的网站/工具完成自定义表单。

我让搜索工作,它在输入字段下面的一个小div中显示结果。我想允许用户查看结果,单击相应的结果,并允许它使用相应的数据填充表单字段。这在数据中没有特殊字符(IE是撇号)时有效,但如果它有撇号,则函数调用会中断。我知道将特殊字符更改为HTML特殊字符:

'

而且,我在将数据添加到数据库时已经这样做了。问题是,由于函数调用是通过AJAX放入div中的,因此HTML特殊字符在放入页面时会被“评估”,并成为文字字符。以下是函数调用的示例:

onclick="popForm('1234', 'Some Name', 'Another Name', 'Someguy's Thing', '5678')"

以下列出了我正在尝试的所有内容:

  1. 用户将数据输入字段
  2. javascript函数通过onkeyup()捕获输入,并对其进行处理
  3. 该函数使用AJAX来调用PHP脚本
  4. PHP脚本执行搜索,获取结果,并回显包含结果的表,以及用于填充字段的onclick函数调用。
  5. Javascript处理来自AJAX的结果,并将结果添加到div的innerhtml。
  6. 用户点击结果,触发onclick,使用单引号括起来的字符串参数进行函数调用
  7. 函数通过将字符串添加到相应的字段 。的document.getElementById( “字段名”)值=串;
  8. 用户提交表单
  9. 目前,由于函数调用中的文字撇号,我们一直到第6步,它就是中断的地方。

    有关如何解决此问题的任何想法?

3 个答案:

答案 0 :(得分:1)

我会认真考虑重写你的逻辑。

  1. 不要使用内联DOM0事件处理程序 - 出于这种原因,它们容易出错
  2. 返回数据,而非函数调用 - eval不好,mkay?
  3. 将正确的事件处理程序(理想情况下使用element.addEventListener)绑定到动态创建并附加到相应元素的第一类函数

答案 1 :(得分:0)

您可以在php脚本中使用preg_replace所有单引号(在步骤5之前)用“escape_quote”之类的特殊字符串替换,然后在popForm函数中替换为{{1单引号“escape_quote”。

答案 2 :(得分:0)

您需要转义传递给具有撇号的javascript函数的数据。

onclick="popForm('1234', 'Some Name', 'Another Name', 'Someguy\'s Thing', '5678')"