parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Не, не помогает.

Gluchik 01.09.2009 16:47

Я упростил до минимума и этот файл и обработчик.
Вот что получилось:
###########################################################################
@auto[]
###########################################################################
@main[]
<html> 
<head></head> 
<body> 
<script type="text/javascript" language="JavaScript" 
  src="^file:find[JsHttpRequest.js]"></script>
^js[^file:find[_js_http_request_load.html]?static=abc]
 

 
    <form style="padding:2px" enctype="multipart/form-data"> 
       
        Text: <input type="text" name="q" value="1251803214">
		<input type="hidden" name="werty" value="-w-">
		<input type="hidden" name="a" value="_ok_">
		<i>Type "error" to show debug capabilities.</i><br>
        
		<input type="button" onclick="request('form', 'post', this.form, 'custom data!')" value="form"> 
		<input type="image" src="../images/test_button.jpg" onclick="request('form', 'post', this.form, 'custom data!')" value="form"> 
    </form> 

<div id="result" style="border:1px solid #000; padding:2px"> 
     Result
</div> 
<div id="debug" style="border:1px dashed red; padding:2px"> 
    Debug
</div> 

</body> 
</html>


@js[sLoaderUri]
<script> 
    // Called on button press. 
    function request(loader, method, data, data2) { 
        // Create new JsHttpRequest object. 
        var req = new JsHttpRequest(); 
        // Code automatically called on load finishing. 
        req.onreadystatechange = function() { 
            if (req.readyState == 4) { 
                if (req.responseJS) { 
                    // Write result to page element.  
                    document.getElementById('result').innerHTML = req.responseJS.a; 
                } 
                // Write debug information too. 
                document.getElementById('debug').innerHTML = req.responseText; 
            } 
        } 
        // Allow caching (to avoid different server queries for  
        // identical input data). Caching is always disabled if 
        // we are uploading a file. 
        req.caching = false; 
        // Prepare request object. 
        req.loader = loader; 
        req.open(method, '$sLoaderUri', true); 
        // Send data (random JavaScript hash). 
        var data = {  
            q: data  
        }; 
         
        req.send(data); 
    } 
</script>


@postprocess[body] 
^taint[as-is][$body]
И его обработчик
@main[]
^use[^file:find[JSHttpRequest.p]{JSHttpRequest.p}]
^try{
#	&#228;&#229;&#234;&#238;&#228;&#232;&#240;&#243;&#229;&#236; &#239;&#240;&#232;&#248;&#229;&#228;&#248;&#232;&#229; &#228;&#224;&#237;&#237;&#251;&#229;. &#240;&#229;&#231;&#243;&#235;&#252;&#242;&#224;&#242; &#239;&#238;&#235;&#243;&#247;&#224;&#229;&#236; &#226; &#226;&#232;&#228;&#229; &#245;&#229;&#248;&#224;
	$hRequest[^JSHttpRequest:decodeRequest[]]
	^hRequest.werty.save[append;JSHttpRequest1.log]
	^hRequest.a.save[append;JSHttpRequest1.log]

	$hParserVariable[
	   $.a[$hRequest.a]
	]
	
	$sDebugMessage[$hRequest.werty]
}{
	$exception.handled(true)
	$sDebugMessage[error]
}

^JSHttpRequest:printResponse[$sDebugMessage;$hParserVariable]
В таком виде, обработчик получает данные формы и записывает их в файл в обоих случаях.
Но если нажимать на кнопь - выдает в result и debug поля формы, то если нажать на image - нет.
Не понимаю что происходит. Если жать на image - данные приходят на обработчик, но ответ или не доходит обратно или игнорируется скриптом.