[JavaScript, AJAX] Задай вопрос, получи ответ

Discussion in 'PHP' started by banned, 9 Jun 2007.

Thread Status:
Not open for further replies.
  1. Vlad_[oK]

    Vlad_[oK] Elder - Старейшина

    Joined:
    14 Jan 2010
    Messages:
    80
    Likes Received:
    106
    Reputations:
    25
    Посоветуйте,пожалуйста,книгу по JavaScript`y
     
  2. ChikiSt

    ChikiSt New Member

    Joined:
    28 Jun 2011
    Messages:
    9
    Likes Received:
    0
    Reputations:
    0
    Подскажите как правильно скачать изображение и поместить его содержимое в переменную. Сделал get запрос и алерт для проверки...
    HTML:
    function Get_captcha() 
    {
     var url = 'http://antigate.com/design/grey2/alogo.gif';
     http.open("GET", url, false);
     http.onreadystatechange = function() 
     {
    	if (http.readyState == 4 && http.status == 200) 
     	{
    		alert(http.responseText);
    		var pic=http.responseText;
    	}
     }
     http.send(null);
    }
    
    алерт выдает только 7 символов 'GIF89aq'. где остальное?
     
  3. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Остальное - это первый попавшийся нулевой байт, вся оставшаяся строка после которого алертом обрезается, изображение же двоичные данные содержит. В переменной содержимое все полностью, просто отображается оно частично до первого нулбайта.
     
    #3023 GRRRL Power, 7 Jul 2011
    Last edited: 7 Jul 2011
  4. ChikiSt

    ChikiSt New Member

    Joined:
    28 Jun 2011
    Messages:
    9
    Likes Received:
    0
    Reputations:
    0
    а это изображение кодированное? Мне оно нужно для последующей отправки на распознавание "содержимое ФАЙЛА капчи, БЕЗ какого либо кодирования, целиком."
    Сейчас попробовал отправить картинку на распознавание
    HTML:
    
    function send_captcha() 
    {
    
    var httpRequest = new XMLHttpRequest();
    var boundary = '-----564AaB03x';
    var requestBody = ("--" + boundary + "\r\n" +
                            "Content-Disposition: form-data; name=\"method\"\r\n" +
                            "\r\n" +
                            "post\r\n" +
                            "--" + boundary + "\r\n" +
                            "Content-Disposition: form-data; name=\"key\"\r\n" +
                            "\r\n" +
                            'КЛЮЧ' + "\r\n" +
                            "--" + boundary + "\r\n" +
                            "Content-Disposition: form-data; name=\"file\"; filename=\"alogo\.gif\"\r\n" +
                            "Content-Type: image/gif\r\n" +
                            "\r\n" +
    			pic +
                            "\r\n" +
                            "--" + boundary + "--"
    );
    
    httpRequest.open('POST', 'http://antigate.com/in.php', true);
    httpRequest.setRequestHeader('Content-Type','multipart/form-data; boundary=' + boundary);   
    httpRequest.send(requestBody);
    
      if(httpRequest.readyState == 4) 
      {
         if (httpRequest.status == 200) 
           alert(httpRequest.responseText);
      }
    }
    
    вылетает ошибка ERROR_WRONG_FILE_EXTENSION - "Расширение файла либо не указано, либо не равно одному из следующих: jpg, gif или png". Как исправить?
     
    #3024 ChikiSt, 7 Jul 2011
    Last edited: 7 Jul 2011
  5. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    Code:
    filename=\"alogo.gif \"\r\n
    Тут лишний пробел. А еще параметр ext нужно указать, судя по их API. Прочитай внимательнее, что отправлять надо.
     
  6. ChikiSt

    ChikiSt New Member

    Joined:
    28 Jun 2011
    Messages:
    9
    Likes Received:
    0
    Reputations:
    0
    В какой кодировке я получу данные если отправлю такой GET запрос ?
    HTML:
     var http = new XMLHttpRequest();
     var url = 'http://antigate.com/design/grey2/alogo.gif';
     http.open("GET", url, true);
     http.onreadystatechange = function() 
     {
    	if (http.readyState == 4 && http.status == 200) 
     	alert(http.responseText);
    	
     }
     http.send(null);
     
  7. #Wolf#

    #Wolf# Elder - Старейшина

    Joined:
    26 Mar 2008
    Messages:
    375
    Likes Received:
    166
    Reputations:
    16
    Очевидно в той, которую отдаст сервер, нет?
    Алсо
     
  8. us_capone

    us_capone New Member

    Joined:
    2 Dec 2008
    Messages:
    3
    Likes Received:
    2
    Reputations:
    1
    <script> - переход по ссылке - нажатие на ссылку

    хай всем! Сильно не бейте ибо в javascript нихт фирштэйн. Проблема ерундовая, но джава совсем не юзал. Кроме баловства <script>alert(1234);</script>.
    А сейчас на форуме одном нашёл хрень такую, что можно накрутить себе рейтинг ибо не проверяются профили и можно туда впихнуть. Получается все кто на страницу зайдут - автоматом как-бы нажмут ссылку СПАСИБО ЗА ПОСТ и мне +1. Ну это пока из самого безобидного.
    Что на место alarm(1234); написать, чтобы типа ссылка нажалась?
    Детский вопрос, но уж извиняйте.
     
  9. Melfis

    Melfis Elder - Старейшина

    Joined:
    25 Apr 2011
    Messages:
    505
    Likes Received:
    105
    Reputations:
    53
    Code:
    <html>
    
    
    <body>
    <div id="div-id" name="div-name" onClick="alert(123)">Голосуй за меня!</div>
    <script>
    var tagId = 'div-id';
    document.getElementById(tagId).click();
    
    var tagName = 'div',
    	tagNameEq = 0; // элемент DIV в доме по счёту
    document.getElementsByTagName(tagName)[tagNameEq].click();
    
    var elName = 'div-name',
    	elEq = 0;
    
    document.getElementsByName(elName)[elEq].click();
    </script>
    </body>
    </html>
    Пример поиска элементов в доме. Подробнее про методы getElementsByName, getElementsByTagName, getElementById (а так же про getElementsByClassName) можно почитать на javascript.ru.

    Можешь не эмулировать клик по кнопке а напрямую вызывать метод добавления спасибки.
     
  10. bjong

    bjong Elder - Старейшина

    Joined:
    26 Jul 2003
    Messages:
    41
    Likes Received:
    12
    Reputations:
    18
    Наверно глупый вопрос, но все же)
    У меня подключен скрипт (<script type="text/javascript" src="style.js"></script>)
    Могу я получить его первую строчку? или хотя бы весь файл целиком через js?
     
  11. chexec

    chexec Member

    Joined:
    19 Nov 2010
    Messages:
    67
    Likes Received:
    11
    Reputations:
    3
    Code:
    xmlhttp=new XMLHttpRequest();
            xmlhttp.onreadystatechange=function()
            {
                if (xmlhttp.readyState==4 && xmlhttp.status==200)
                {
                    alert(xmlhttp.responseText);
                }
            }
            this.xmlhttp.open("GET","style.js",true);
            this.xmlhttp.send(); 
    
    http://www.w3schools.com/ajax/tryit.asp?filename=tryajax_first
     
  12. bjong

    bjong Elder - Старейшина

    Joined:
    26 Jul 2003
    Messages:
    41
    Likes Received:
    12
    Reputations:
    18
    Спасибо :)
     
  13. AlonDelon

    AlonDelon Member

    Joined:
    12 Nov 2010
    Messages:
    322
    Likes Received:
    18
    Reputations:
    -3
    нужен скрипт всплывающего окна, банера.
     
  14. Adio

    Adio Elder - Старейшина

    Joined:
    23 May 2005
    Messages:
    1,646
    Likes Received:
    148
    Reputations:
    18
    поищи dhtml popup creator
     
  15. boortyhuhtyu

    boortyhuhtyu Member

    Joined:
    2 Feb 2011
    Messages:
    727
    Likes Received:
    26
    Reputations:
    -6
    как переписать страницу через dom xss или перепесать скрипт чтоб свой работал?
     
  16. MRAK9

    MRAK9 Member

    Joined:
    29 Jul 2007
    Messages:
    115
    Likes Received:
    26
    Reputations:
    0
    Есть код
    Code:
    <ul class="table" id="id1">
      <li onclick="a(this)" id="id2">1 раздел
          <ul>
              <li>1 подраздел</li>
              <li onclick="a(this)" id="id3">1 подраздел
                  <ul>
    	       <li>1 подподраздел</li>
    	        <li>2 подподраздел</li>
                  </ul>
              </li>
              <li>2 подраздел</li>
              <li>3 подраздел</li>
          </ul>
      </li>
    </ul>
    
    При нажатии на "1 раздел" вызывается функция a(), которая производит некие манипуляции, затем при нажатии на "1 подраздел" опять же вызывается эта функция, которая производит манипуляции уже с этим элементом...
    Вопрос собственно в том, что при нажатии на "1 подраздел" мы вызываем функцию не только у "1 подраздел" но и у "1 раздел". То есть событие onclick привязывается ко всему блоку LI, а не к тексту....
    Причем надо чтобы при нажатии на "1 раздел" снова выполнялась функция для данного элемента.
    Так как же сделать чтобы событие onclick было вызвано при нажатии именно на текст "1 подраздел", а не на весь блок LI?
     
    #3036 MRAK9, 15 Jul 2011
    Last edited: 15 Jul 2011
  17. Melfis

    Melfis Elder - Старейшина

    Joined:
    25 Apr 2011
    Messages:
    505
    Likes Received:
    105
    Reputations:
    53
    Code:
    <html>
    
    <head>
    <script>
    
    //кроссбраузерность для навешивания обработчика
    if (!document.attachEvent) {
    	Object.prototype.attachEvent = function(ev, f) {
    		if (ev.indexOf('on') >= 0) {
    			ev = ev.substring(2);
    		}
    		this.addEventListener(ev, f, false);
    	};
    }
    
    // в ие нету такого метода, поэтому для него сделаем, так же может принимать вторым параметром название тега(ускоряет работу)
    if (!document.getElementsByClassName) {
    	document.getElementsByClassName = function (className, tagName) {
    		var obj = document.getElementsByTagName(tagName || '*'),
    			elements = [];
    
    		for (var i=0; i < obj.length; i++) {
    			if (obj[i].className.indexOf(className) >= 0) {
    				elements.push(obj[i]);
    			}
    		}
    
    		return elements;
    	}
    }
    //остановка действий после первого срабатывания
    function stopBubble (event) {
    	if (event.stopPropagation) {
    		event.stopPropagation()
    	} else {
    		event.cancelBubble = true
    	}
    }
    </script>
    </head>
    <body>
    <ul class="table" id="id1">
      <li id="id2" class="main">1 раздел
          <ul>
              <li>1 подраздел</li>
              <li id="id3">1 подраздел
                  <ul>
    	       <li>1 подподраздел</li>
    	        <li>2 подподраздел</li>
                  </ul>
              </li>
              <li class="sub">2 подраздел</li>
              <li class="sub">3 подраздел</li>
          </ul>
      </li>
    </ul>
    <script>
    //делаем обработчик для главных пунктов
    var mainEls = document.getElementsByClassName('main');
    for (var i=0; i<mainEls.length; i++) {
    	mainEls[i].attachEvent('onclick', function(ev) {
    		(!ev.target) && (ev.target = ev.srcElement);
    
    		alert(ev.target.className); //ну или то что должно происходить тут
    		stopBubble(ev);
    	});
    }
    //обработчик для подпунктов
    var subEls = document.getElementsByClassName('sub');
    for (var i=0; i<subEls.length; i++) {
    	subEls[i].attachEvent('onclick', function(ev) {
    	
    		(!ev.target) && (ev.target = ev.srcElement);
    		
    		alert(ev.target.className);
    		stopBubble(ev);
    	});
    }
    </script>
    </body>
    </html>
    Остаётся только выставить классы у пунктов/подпунктов. Этот(тот что после хтмл разметки идёт) код можно пихнуть в бошку, но тогда его надо пихать в обработчик по окончанию загрузки страницы.

    ev.target почти тоже самое что и this после передачи его через onClick, но ещё есть доп свойства и методы.

    зы. вместо алерта можешь поставить свою функцию a(ev.target)
     
    #3037 Melfis, 15 Jul 2011
    Last edited: 15 Jul 2011
  18. MRAK9

    MRAK9 Member

    Joined:
    29 Jul 2007
    Messages:
    115
    Likes Received:
    26
    Reputations:
    0

    Если у нас есть меню и подменю это прокатит... а если бесконечная вложенность?! Мы же не сможем по классам их отлавливать...
     
  19. Melfis

    Melfis Elder - Старейшина

    Joined:
    25 Apr 2011
    Messages:
    505
    Likes Received:
    105
    Reputations:
    53
    достаточно вообще одного класса - который разворачивается и всё
     
    1 person likes this.
  20. MRAK9

    MRAK9 Member

    Joined:
    29 Jul 2007
    Messages:
    115
    Likes Received:
    26
    Reputations:
    0
    А если вложенность очень большая и у последующих подменю тоже будет вызов функции, как тогда отличить к примеру подподменю от подподподменю?
     
Thread Status:
Not open for further replies.