2016-06-11 3 views
1

Я пишу приложение ASP.NET Web Forms, и на одной из страниц у меня есть модальная форма для регистрации, которая использует JQuery .dialog() для ее отображения. Из-за ограничений в ASP.NET, что страница может содержать только один элемент form (главная страница содержит, конечно,), модальная форма, которую я создал, использует теги DIV. Таким образом, внешняя оболочка DIV называется «register». Вот код DIV:«JSON.stringifiy» возвращает URLEncoded данные вместо JSON

 <div id="register" title="New Member Registration"> 
     <div class="modalCaption"> 
      <span class="red">Fields in red</span> 
      <span>are required. Your information is not shared with anyone and is fully encrypted in our 
      database for your peace of mind.</span> 
     </div> 
     <br /> 
     <div class="row"> 
      <div class="row_label_red">Desired User Name :</div> 
      <div class="row_field"><input type="text" name="userName" size="32" MaxLength="32" /></div> 
     </div> 
     <div class="row"> 
      <div class="row_label_red">Your Email :</div> 
      <div class="row_field"><input type="text" name="email" size="32" MaxLength="64" /></div> 
     </div> 
     <div class="row"> 
      <div class="row_label_red">Password (6 char. min) :</div> 
      <div class="row_field"><input type="password" name="pwd" size="32" MaxLength="32" /></div> 
     </div> 
     <div class="row"> 
      <div class="row_label_red">Confirm Password :</div> 
      <div class="row_field"><input type="password" name="conPwd" size="32" MaxLength="32" /></div> 
     </div> 
     <div class="row"> 
      <div class="row_label">Your Last Name :</div> 
      <div class="row_field"><input type="text" name="lastName" size="32" MaxLength="64" /></div> 
     </div> 
     <div class="row"> 
      <div class="row_label">Your First Name :</div> 
      <div class="row_field"><input type="text" name="firstName" size="32" MaxLength="64" /></div> 
     </div> 
     <div class="row"> 
      <div class="row_label">ZIP/Postal Code :</div> 
      <div class="row_field"><input type="text" name="zip" size="10" MaxLength="10" /></div> 
     </div> 
     <div class="row"> 
      <div class="row_label">How Did You Hear About Us?</div> 
      <div class="row_field"> 
       <select name="about"> 
        <option Value="NONE" Selected>-- Please Choose One --</option> 
        <option value="News">News Article</option> 
        <option value="Google">Google Search</option> 
        <option value="Bing">Bing Search</option> 
        <option value="OtherSearch">Other Search Engine</option> 
        <option value="Friend">Friend's Referral</option> 
        <option value="Miscellaneous">Other</option> 
       </select> 
      </div> 
     </div> 
     <div class="row"> 
      <div id="spStatus"></div> 
     </div> 
    </div> 

Для сбора данных полей формы (так как мне приходится использовать DIV вместо form), я пытаюсь использовать JSON.stringify() для форматирования данных в JSON пар имя/значение. Чтобы проверить это, я использую следующее:

var formData = JSON.stringify($.param($('#register').find(':input'))); 

var data = '{ "register": "' + formData + '"}"'; 
alert(data); 

Когда я проверить это, я получаю это как выход из stringify() вызова:

Output of web page

Как вы можете видеть, stringify() вызова дает мне URL-кодированные данные, которые не то, что мне нужно или действительно ожидалось. Может ли кто-нибудь предложить какую-то помощь здесь, на то, что мне не хватает?

+0

'$ .param' выполняет кодировку URL. – Barmar

+0

Таким образом, без необходимости писать кучу ручного кода для извлечения значений из полей ввода содержащего DIV, есть ли какой-либо ДРУГОЙ способ преобразования входных полей в JSON? Как я могу переписать эту строку кода для этого? –

+0

Зачем вам нужно конвертировать его в JSON? Просто используйте результат с URL-кодировкой, возвращаемый '$ .param()'. – Barmar

ответ

2

Не использовать $.param, он сериализует все входы в строку с URL-кодировкой. Переверните элементы ввода и поместите их в объект, а затем преобразуйте их в JSON.

var formData = {}; 
$('#register').find(':input').each(function() { 
    formData[this.name] = this.value; 
}); 
var json = JSON.stringify(formData); 
+0

PERFECT! Это работает! Я ** ДЕЙСТВИТЕЛЬНО ** ценю вашу помощь по этому поводу! –

+0

Итак, теперь я получаю эту ошибку от веб-службы: «Неверный объект, прошедший в, ':' или '}' ожидается. (20):« - Что это такое? –

+0

Нужно будет увидеть код, который вы используете, чтобы сделать сообщение. Кроме того, я не знаю ASP.NET, поэтому я не очень хорошо знаком с тем, что он ожидает в качестве входных данных. – Barmar

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