2016-04-08 2 views
1

У меня есть test.asp с этим кодом:AJAX - Классический ASP - Дать Форма

<HTML> 
<HEAD> 
    <SCRIPT src="ajaxScript.js" type="text/javascript"></SCRIPT> 
</HEAD> 
<BODY> 
    <FORM action="action_page.asp" method="post"> 
     First Name:<BR> 
     <INPUT type="text" name="FName"><BR> 
     Last Name:<BR> 
     <INPUT type="text" name="LName"><BR> 
     <INPUT type="submit" value="Submit"> 
     <BUTTON type="button" onClick="loadXMLDoc('action_page.asp',this.form);">GoGoGo!</BUTTON> 
    </FORM> 
    <DIV id="msgBoxDiv">TEST!!</DIV> 
</BODY> 
</HTML> 

Файл Javascript, который называется (ajaxScript.js) имеет следующий код:

var req; // global variable to hold request object 

function processReqChange() 
{ 
    if (req.readyState == 4 && req.status == 200){document.getElementById("msgBoxDiv").innerHTML = req.responseText;} 
} 

function loadXMLDoc(url, params) 
{ 
    if(window.XMLHttpRequest) 
    { 
     try 
     { 
      req = new XMLHttpRequest(); 
     } catch(e) 
      { 
       req = false; 
      } 
    } 
    else 
    { 
     req = false; 
    } 

    if(req) 
    { 
     var formData = new FormData(params); 

     req.onreadystatechange = processReqChange; 
     req.open("POST", url, true); 
     req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
     req.send(formData); 
     return true; 
    } 
    return false; 
} 

И мой «action_page.asp», чтобы получить параметры, как так:

<% 
    vRF1 = request.Form("FName") 
    vRF2 = request.Form("LName") 
%> 

<HTML> 
    <HEAD> 

    </HEAD> 
    <BODY> 
     First:<%=vRF1%><BR> 
     Last:<%=vRF2%> 
    </BODY> 
</HTML> 

Если я нормальный представить (кнопка отправки), все идет как е xpected: он показывает новую страницу со значениями формы.

НО ... если я попытаюсь прочитать целевой ASP с помощью AJAX (кнопка gogogo), я не могу отправить форму на целевую страницу. Я получаю целевую страницу, но без предполагаемых значений. я получаю это:
Result page

Если я изменю "req.send (FormData);" для "req.send (" FName = "+ 1+" & LName = QWER ");", все работает хорошо.

Я читал, что для отправки всей формы (например, «обычный» пост), мне просто нужно сделать «var formData = new FormData (params)»; где params будет объектом формы, а затем отправить FormData (params).

Что я могу делать неправильно здесь?

+0

var formData = new FormData (params); попробуйте> console.log (formData); проверить значение для сообщения –

+0

Возможно найти эту статью полезной - [Легче Ajax с HTML5 FormData Interface] (http://www.sitepoint.com/easier-ajax-html5-formdata-interface/) - Имеет «ванильный» подход к используя 'FormData', чтобы правильно передавать данные с помощью' application/x-www-form-urlencoded'. – Lankymart

+1

@ Lankymart Разве вы не хотите писать это как ответ? Таким образом, я мог бы поблагодарить вас за это! – Fernando

ответ

0

Я не хотел оставлять это без ответа.

Lankymart дал путь к правильному ответу ... правда, когда я отправил «новый FormData (formID)», я отправлял в multipart/form-data, а не application/x-www-form-urlencoded как я заявлял.

SO ... Мы можем сформулировать гипотезу Lankymart (application/x-www-form-urlencoded). Другими словами, вы просто берете мой первоначальный вопрос и в req.send(); вы должны сформировать строку параметров для передачи (точно так же, как в запросе GET). "name1 =" + param1 + "& name2 =" + param2. Я выбрал этот, потому что для того, что мне было нужно, этого было более чем достаточно.

OR ... Если нам действительно нужно/хотите отправить форму - req.send (formData) ..., которая будет выдавать multipart/form-data (проверьте пример формата multipart/form -data здесь: http://www.codeproject.com/Articles/1125/Advanced-ASP-Uploader) В этом случае ... вам нужно создать парсер для информации. Вот что я закодирован (просто чтобы попробовать вещь или два):

Function StoreNameAndValues(tempVarArray) 
    Dim tempVar 

    for i = 1 to ubound(tempVarArray)-1 
     if tempVarArray(i)<>"" then 
      tempVar=Split(tempVarArray(i), """") 

      if ubound(tempVar)>1 then 
       postNamesArray(i-1)=tempVar(1) 
       postValuesArray(i-1)=StripString(tempVar(2),CHR(13)&CHR(10)) 
      End if 
     End if 
    next 
End Function 


tempVar=Request.TotalBytes 
tempVar1=Request.BinaryRead(tempVar) 

tempVar1=SimpleBinaryToString(tempVar1) 

separator=Split(tempVar1, CHR(13)&CHR(10))(0) 
tempVar2=Split(tempVar1,separator) 

postArgumentsSize=ubound(tempVar2)-1 
Dim postNamesArray() 
Dim postValuesArray() 
ReDim Preserve postNamesArray(postArgumentsSize) 
ReDim Preserve postValuesArray(postArgumentsSize) 

StoreNameAndValues(tempVar2) 

В этом примере я построить очень элементарное анализатор ... он не готов к вещам, как загрузка файла, но это всего лишь пример того, что делать.

Надеюсь, что я не совершил большой ошибки ... и это поможет кому-то.

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