2016-04-08 4 views
1

ich einen Test.asp mit diesem Code haben:AJAX - Klassisches ASP - Eine Formular

<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> 

Die Javascript-Datei, die diesen Code genannt wird, hat (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; 
} 

und meine "action_page.asp", um die Parameter zu erhalten, ist in etwa so:

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

<HTML> 
    <HEAD> 

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

Wenn ich die normale machen einreichen (Submit-Button), alles als e geht xpected: Es zeigt eine neue Seite mit den Werten des Formulars an.

ABER ... wenn ich versuche, den Ziel-ASP mit AJAX (gogogo-Schaltfläche) zu lesen, kann ich das Formular nicht an die Zielseite senden. Ich erhalte die Zielseite, aber ohne die angenommenen Werte. ich diese:
Result page

Wenn ich ändern "req.send (Formdata);" für "req.send (" FName = "+ 1+" & LName = QWER ");", alles funktioniert gut.

Ich habe gelesen, dass, um das gesamte Formular zu senden (wie die "üblichen" Post tun), ich muss nur "var formData = new FormData (params);" wo params das Formularobjekt wäre, und senden Sie dann die FormData (params).

Was kann ich hier falsch machen?

+0

var formData = new FormData (params); versuch> console.log (formData); check value to post –

+0

Findet diesen Artikel nützlich - [Einfachere Ajax mit der HTML5 FormData Interface] (http://www.sitepoint.com/easier-ajax-html5-formdata-interface/) - Hat eine "Vanille" Ansatz zu Verwenden von 'FormData', um die Daten mit 'application/x-www-form-urlencoded' korrekt zu übergeben. – Lankymart

+1

@Lankymart Willst du das nicht als Antwort schreiben? Auf diese Weise könnte ich dir dafür danken! – Fernando

Antwort

0

Ich wollte das nicht ohne eine Antwort verlassen.

Lankymart gab den Weg zur richtigen Antwort ... die Wahrheit ist, als ich die "new FormData (formID)" eingereicht habe, sendete ich mehrteilige/form-data und nicht application/x-www-form-urlencoded wie ich erklärt habe.

SO ... Wir können die Hypothese Lankymart angegeben (application/x-www-form-urlencoded). Mit anderen Worten, Sie nehmen nur meine erste Frage und in req.send(); Sie müssen die Zeichenfolge der zu übergebenden Parameter bilden (wie in einer GET-Anfrage). "name1 =" + param1 + "& name2 =" + param2. Ich entschied mich für diese, denn für das, was ich brauchte, war das mehr als genug.

ODER ... Wenn wir das Formular senden/senden möchten - req.send (formData) ..., das ein multipart/form-data erzeugt (überprüfen Sie ein Beispiel für das Format eines multipart/form -Daten hier: http://www.codeproject.com/Articles/1125/Advanced-ASP-Uploader) In diesem Fall ... müssen Sie einen Parser für die Info erstellen. Hier ist, was ich codiert haben (nur ein oder zwei Dinge zu versuchen):

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) 

In diesem Beispiel habe ich eine sehr rudimentäre Parser bauen ... es ist nicht für Dinge wie Datei-Upload vorbereitet, aber Dies ist nur ein Beispiel dafür, was zu tun ist.

Ich hoffe, ich habe keinen großen Fehler gemacht ... und es wird jemandem helfen.

Verwandte Themen