JQuery проверяет удаленную структуру возврата - PullRequest
0 голосов
/ 28 декабря 2011

Ссылка на предыдущий вопрос приведена здесь: Как использовать удаленную проверку jquery validate для установки и возврата значений полей формы на страницу действия формы?

Я использую JQuery Validate для удаленной проверки формы в нашем приложении Coldfusion.

Поскольку ошибки удаленной проверки обнаруживаются и подготавливаются к уведомлению пользователя, мы создаем структуру возврата, которая содержит не только ошибку проверки, но и группу полей формы для использования на странице действий формы.

Поскольку структура ошибки удаленной проверки объединена с нашей структурой формы, наше отображение проверки для пользователя теперь не работает.

Вот фрагмент создаваемого текста ошибки:

<cfset form.errorfieldlist = listappend(form.errorfieldlist, "password")>
<cfset form.errormessagelist = listappend(form.errormessagelist, "Your <strong>assigned password</strong> is required to proceed.", form.rs)>

Вот фрагмент исходной устанавливаемой структуры ошибки:

<cfset result_struct = {
  errorfieldlist = listtoarray(form.errorfieldlist),
  errormessagelist = listtoarray(form.errormessagelist, form.RS)
}>

Здесь мы добавляем структуру формы к структуре результата:

<cfset StructAppend(result_struct, form)>

Вот возврат к плагину проверки:

<cfoutput>#serializeJSON(result_struct)#</cfoutput>

Вот плагин проверки, форматирующий возвращаемую ошибку для отображения пользователя:

var errors = {};

$.each(data.ERRORFIELDLIST, function(i, val) {
  eval("errors."+val+"='"+data[i]+"'");
});

var dialog_html = '<ul>';

 $.each(data.ERRORMESSAGELIST, function(i, val) {
   dialog_html += '<li><span style="color:#cd0a0a;">'+val+'</span></li>';
 });

ДО того, как мы начали объединять структуру формы со структурой результата, наша процедура сообщения об ошибках работала как ожидалось. Вот пример дампа #serializeJSON (result_struct) # этого рабочего возврата:

while(1);{"ERRORMESSAGELIST":["Please enter a valid <strong>password<\/strong> (hint: it's case sensitive).","Don't forget, if you need help at any time, please don't hesitate to <strong>click the 'Contact Support' button below<\/strong> for an immediate reponse. Thanks!"],"ERRORFIELDLIST":["password"]}

А вот как это выглядит ПОСЛЕ того, как мы начали объединять структуры:

while(1);{"ITEMTHUMB_TITLE":"","ERRORMESSAGELIST":"Please enter a valid <strong>password<\/strong> (hint: it's case sensitive).|Don't forget, if you need help at any time, please don't hesitate to <strong>click the 'Contact Support' button below<\/strong> for an immediate reponse. Thanks!","ITEMIMAGE_BORDER":"","CARTDOWNLOADKEY":"13FF45A0-E628-749F-C6BB79F60DF90E6F","ITEMURL_SIZE":"","ITEMNAME":"","FIELDNAMES":"VERIFIED,DLURL,DLLOCATION,ITEMNAME,ITEMTEASE,ITEMIMAGE,ITEMIMAGE_BORDER,ITEMIMAGE_ALT,ITEMIMAGE_TITLE,ITEMTHUMB,ITEMTHUMB_BORDER,ITEMTHUMB_ALT,ITEMTHUMB_TITLE,ITEMPUBNOTES,ITEMURL_SIZE,FIRST_NAME,EMAIL,PASSWORD,CARTDOWNLOADKEY,SUBMIT_BUTTON","ITEMIMAGE_ALT":"","DLLOCATION":"","ITEMTHUMB_BORDER":"","ITEMTEASE":"","RS":"|","ITEMIMAGE_TITLE":"","ITEMTHUMB_ALT":"","FIRST_NAME":"","ITEMPUBNOTES":"","EMAIL":"bmyers@bmyers.com","VERIFIED":"","ERRORFIELDLIST":"password","PASSWORD":"1asdf1","ITEMIMAGE":"","SUBMIT_BUTTON":"Get Download","DLURL":"","ITEMTHUMB":""}

Итак, по сути, модальная ошибка, которая должна выглядеть так:

ожидаемое поведение

... вместо этого выглядит так:

неожиданное поведение

Можете ли вы сказать мне, что вызывает этот разрыв в результате слияния структур?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 29 декабря 2011

Я думаю, что structAppend () перезаписывает значения из result_struct. Попробуйте изменить вызов на это:

<cfset StructAppend(result_struct, form, false)>

Здесь false указывает CF не перезаписывать записи в struct1 теми, которые были найдены в struct2: http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=functions_s_15.html

0 голосов
/ 28 декабря 2011

Если мы посмотрим на ваш второй ответ JSON (ПОСЛЕ объединения структур), ERRORMESSAGELIST больше не массив, а просто строка. Как мы знаем, строка - это не что иное, как массив символов. Вот почему вы видите каждый символ в тегах <li>. Первый ответ JSON сработал, потому что ERRORMESSAGELIST был массивом строк в этом.

...