Как получить ajax-запрос, который будет вести себя как отправка стандартной формы HTTP - PullRequest
1 голос
/ 13 января 2012

Это для представления html на сервере e restlet, чтобы разрешить фиксацию форм с помощью глаголов PUT и DELETE http.

<script type="text/javascript">
            function submitFormXMLHttpRequest(meth, url, formname){

            var xmlhttp;
            var params;
            var form = document.getElementById(formname);
            var fieldcount = form.elements.length;
            if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp=new XMLHttpRequest();
              }

            var form = document.getElementById(formname);
            for (i=1; i<=(fieldcount-1); i++) {

                if(form.elements[i].name != "") params = params + form.elements[i].name + "=" + form.elements[i].value + "&";

            }
            //alert(params);
            xmlhttp.open(meth, url+"?"+params, true);
            xmlhttp.send();

            }
    </script>`

`(Пример вставки кода HTML кажется проблемой, но здесьформа)

form id = "r1" action = "resource1" method = "PUT"! - некоторые поля ввода разметки ftl и т. д. - кнопка onclick = 'submitFormXMLHttpRequest ("PUT", "resource1", "r1"); 'type = "button" Submit / button input type = "submit" value = "Submit" / `

Когда нажата кнопка, глагол PUT появляется в журналах сервера и обрабатывается правильно.Но тогда рестлет обычно отвечает следующим представлением результатов отправки.Этого не происходит, потому что он проходит как AJAX-запрос.Если я добавлю Response.Redirect(url, true), то в конечном итоге отправлю форму еще раз как GET.

1 Ответ

0 голосов
/ 13 января 2012

Тот факт, что ваш рестлет обрабатывает ваш запрос как Ajax-запрос, возможно, из-за заголовка, установленного XMLHttpRequest.

Чтобы избежать этого, вы можете попытаться удалить этот заголовок:

if (window.XMLHttpRequest){// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp = new XMLHttpRequest();
    xmlhttp.setRequestHeader("x-requested-with", null);
}

Потому что, как правило, он будет определяться с помощью «XMLHttpRequest», указывая на то, что это ajax-запрос.

Редактировать: я знаю, что с Play!Framework, вы можете принудительно вызвать метод (PUT & DELETE) с помощью x-http-method-override=, что может быть очень полезно, потому что эти два действия не распространены на html-странице.Может быть, вы найдете что-то похожее в рестлете?

...