Avatar billede mitbrugernavn Praktikant
04. december 2008 - 16:09 Der er 9 kommentarer og
1 løsning

ajax - Length Required

har følgende form som sender op gennem ajax_kurv.js og sender videre - alt kører perfekt i ei - men i firefox kommer der følgende fejl i kurven - Length Required ??????


<script type="text/javascript"  src="ajax_koeb.js"></script>    

        <form name="form2" >
                <input name="vare_id" type="hidden"  value="001">
              <input name="vare_nr_1" type="hidden"  value="002">
              <input name="id" type="hidden"value="566">
              <input name="vare_pris_1" type="hidden"value="500,00">
              <input name="porto_vaegt" type="hidden" value="0">
              <input name="vare_navn_1" type="hidden" value="Gavekort">
            <input name="type_valg" type="hidden" value="">

              <input name="vare_antal_1" type="text" size="3" class="tekst_2" onblur='java script:CheckNumber(this)'>
              <input  value="køb" class="tekst" type="button" onclick="varekurv(this.form);return false;">
                </form>

her er ajax_koeb.js


var xmlHttp

function varekurv(o)
{
strid = o.id.value;
strvare_id = o.vare_id.value;
strvare_nr_1 = o.vare_nr_1.value;
strvare_pris_1 = o.vare_pris_1.value;
strporto_vaegt = o.porto_vaegt.value;
strvare_navn_1 = o.vare_navn_1.value;
strtype_valg = o.type_valg.value;
strvare_antal_1 = o.vare_antal_1.value;
strkoeb = 'ok';
           
if (strvare_antal_1.length==0)
  {
// document.getElementById("kurv").innerHTML="";
  return;
  }
xmlHttp=GetXmlHttpObject();
if (xmlHttp==null)
  {
  alert ("Your browser does not support AJAX!");
  return;
  }
var url="ajax_kurv.asp";
//url=url+"?q="+str;
//url=url+"&sid="+Math.random();

o.vare_antal_1.value = ''
url=url+"?id="+strid+"&koeb="+strkoeb+"&type_valg="+strtype_valg+"&vare_id="+strvare_id+"&vare_nr_1="+strvare_nr_1+"&vare_pris_1="+strvare_pris_1+"&porto_vaegt="+strporto_vaegt+"&vare_navn_1="+strvare_navn_1+"&vare_antal_1="+strvare_antal_1;


xmlHttp.onreadystatechange=stateChanged;
xmlHttp.open("POST",url,true);
xmlHttp.send(null);
}

function stateChanged()
{
if (xmlHttp.readyState==4)
{
document.getElementById("kurv").innerHTML=xmlHttp.responseText;
}
}

function GetXmlHttpObject()
{
var xmlHttp=null;
try
  {
  // Firefox, Opera 8.0+, Safari
  xmlHttp=new XMLHttpRequest();
  }
catch (e)
  {
  // Internet Explorer
  try
    {
    xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    }
  catch (e)
    {
    xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
return xmlHttp;
}
Avatar billede erikjacobsen Ekspert
04. december 2008 - 18:15 #1
Jeg har ikke selv erfaret den fejlbesked, men jeg vil tro du skal sende en tekst med. Dvs. ikke
  xmlHttp.send(null);
men
  xmlHttp.send("");

Og så har din kode nu ikke synderlig meget med AJAX at gøre.
Avatar billede olebole Juniormester
04. december 2008 - 21:36 #2
<ole>

Det burde ikke være nødvendigt at gentage Eriks sidste linje, men jeg tvivler også stærkt på, dén fejl skulle stamme fra noget, du her her. Nu har jeg godt nok heller aldrig forsøgt mig med at sende en helt tom query  =)

Du blander GET og POST metoderne:
Når man bruger GET, skal data medsendes som en query streng i URL'en.
Bruger man derimod POST, sendes data _ikke_ med i URL'en, men som datapakker.

Sådan:
    var url = "http://www.domain.dk/sti/til/dokument.php";
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.open("POST",url,true);
    xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
    xmlHttp.onreadystatechange=stateChanged;
    xmlHttp.send("id=123&gnu=dyr");

- og så brug min XMLHttpRequest wrapper her:
    http://www.dengodekode.dk/artikler/ajax/xmlhttprequest_wrapper.php

- og læs, hvorfor innerHTML ikke har noget at gøre i moderne webkode her:
    http://www.dengodekode.dk/artikler/DOM/no_innerhtml.php

Læg ikke mindst mærke til de sidste linjer i konklusionen:
Uanset, om man er for eller imod valid klientkode - og uanset, hvor godt eller skidt DOM performer i forhold til innerHTML - beslaglægger det adskilligt gange flere af serverens resourcer at formatere HTML end JSON. Det tager typisk fra 4 gange så lang tid at formatere HTML - men ikke sjældent endnu længere!

Da det er på serveren, performance _virkelig_ tæller, er der egentlig ikke noget at diskutere. Der bør _aldrig_ sendes HTML retur ved brug af Ajax!  ;o)

/mvh
</bole>
Avatar billede olebole Juniormester
04. december 2008 - 21:43 #3
Bemærk i øvrigt, at de medsendte data skal escapes, hvis de indeholder specialtegn:

var sQuery = "livret=" + encodeURIComponent("Øl, flæsk og hornmusik");
xmlHttp.send(sQuery);

Hvis du f.eks. vil sende et array, og derfor bruger square brackets i dine parameternavne, skal disse også escapes:

var sQuery = encodeURIComponent("livret[]") + "=" + encodeURIComponent("Øl, flæsk og hornmusik");
sQuery += "&" + encodeURIComponent("livret[]") + "=" + encodeURIComponent("Ål og røreæg");

- men '&' og '=' må aldrig escapes  ;o)
Avatar billede olebole Juniormester
04. december 2008 - 21:45 #4
Nåja ... skal du medsende en URL, skal du bruge encodeURI:
    var sQuery = "url=" + encodeURI("http://www.domain.dk/sti/til/side.html");
Avatar billede mitbrugernavn Praktikant
06. december 2008 - 15:41 #5
super tak for hjælpen og den/de gode forklaringer - og så vidste jeg godt at da jeg smed koden med innerHTML var olebole på banen ;-))) - men det er jo også en måde at få jer til at hjælpe ;-))))

læg et svar så er der klejner på vej
Avatar billede olebole Juniormester
06. december 2008 - 20:54 #6
;o)
Avatar billede mitbrugernavn Praktikant
07. december 2008 - 07:11 #7
kom med et svar -> Erikjacobsen - hvis du vil have point
Avatar billede erikjacobsen Ekspert
07. december 2008 - 12:02 #8
Nej tak.
Avatar billede mitbrugernavn Praktikant
07. december 2008 - 14:22 #9
Så ryger point til olebole - tak for hjælpen begge 2
Avatar billede olebole Juniormester
07. december 2008 - 18:34 #10
Selvtak ... og tak for points  =)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester