2012-05-09 2 views
2

У меня есть форма, в которой пользователи будут копировать и вставлять текст из слова doc. Это содержимое может содержать символ табуляции. Функция on-click обрабатывает отправку формы, используя JAXX-вызов ajax для функции холодного пула. Форма передается через вызов ajax компоненту.символ вкладки, вызывающий компонент ajax coldfusion, не работает, 500 Внутренняя ошибка сервера

<form name="test"> 
<textarea name="swPurpose"></textarea> 
<input type="button" value=" Go " onclick="goForm(this.form);" /> 
</form> 

function goForm(f){ 
var param=f; 
http('POST','testCFC.cfc?method=test',goForm_RTN,param); 
} 

<cfcomponent output="false"> 
<cffunction name="test" access="remote" output="false"> 
<cfset rtn=structNew()/> 
<cfsavecontent variable="rtn.html"> 
<cfoutput><p>#form.swPurpose#</p></cfoutput> 
</cfsavecontent> 
<cfreturn rtn /> 
</cffunction> 
</cfcomponent> 

Это работает очень хорошо, если только символ табуляции не находится в содержимом формы. Если вкладка в содержимом, я получаю 500 внутренних ошибок сервера.

Это образец текста, представленный в форме.

 
1 This is text 
2 This is text 
3 This is text 

Это закодированный текст из Firebug, который отправляется в функцию.

 
swPurpose=1%9This%20is%20text%0a2%9This%20is%20text%0a3%9This%20is%20text&btn=%20OnClick%20,%20Submit%20 

Использование Firebug, я вижу, что содержимое, отправленное в функцию, закодировано. Вкладки -% 9. Я могу поместить cfc в действие формы, и функция не сработает.

Мое обходное решение состоит в том, чтобы вырезать вкладки с помощью javascript перед отправкой его функции. Однако я хотел бы понять, почему вкладка вызывает ошибку 500, и если есть что-то, что можно сделать для предотвращения этого.

+0

очень таинственный. Думаю, я сам проверю это. –

+0

Что произойдет, если вы измените код функции на ''? –

ответ

0

Попробуйте этот код:

function goForm(f){ 
    var param = escape(f);//Or also encodeURI(f) or even encodeURIComponent(f) 
    http('POST','testCFC.cfc?method=test',goForm_RTN,param); 
} 
+0

Я попытался бежать (f). Firebug показал ту же закодированную строку, которая отправляется компоненту с той же внутренней внутренней ошибкой сервера. – garyv

+0

Странно. И каково содержимое f var, например? –

0

Вы можете заменить из вкладок с помощью простого регулярного выражения в коде CF перед передачей обратно.

<cfcomponent output="false"> 
    <cffunction name="test" access="remote" output="false"> 
     <cfargument name="form"> 
     <cfset var rtn=structNew()/> 

     <cfsavecontent variable="rtn.html"> 
      <cfoutput><p>#ReReplace(form.swPurpose, "\t", "&nbsp;&nbsp;", "ALL")#</p></cfoutput> 
     </cfsavecontent> 
     <cfreturn rtn /> 
    </cffunction> 
</cfcomponent> 
+0

Не нужно регулярное выражение для этого, просто замените (текст, chr (9), "   ", "все") 'сделают. (Хотя я сомневаюсь, что это правильный способ справиться с этой проблемой здесь.) –

+0

Ошибка внутреннего сервера 500 не допускает решения CF. Ошибка возникает до того, как любой CF-код может быть обработан. Мое обходное решение должно было произойти на клиенте до того, как содержимое формы с символом табуляции было отправлено на сервер. – garyv

 Смежные вопросы

  • Нет связанных вопросов^_^