2009-12-29 3 views
1

Я пытаюсь начать изучение AJAX, и я уже попал в маленький пень. Поэтому я начинаю просто и просто пытаюсь вывести предупреждение, чтобы показать длину строки, которую пользователь вводит в текстовое поле.Простой код AJAX не распознается

HTML-:

<form action="/scripts/addemail_fb.php" method="post"> 
<input type="text" name="email" value="Enter your email here!" /> 
<input id="submit" type="submit" name="submit" value="Go!"  onClick="check(this.form.email.value);"/> 
</form> 

JS:

function check(email) { 


    if (window.XMLHttpRequest) { 
     req = new XMLHttpRequest(); 
    } 


    else if (window.ActiveXObject) { 
     req = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    email=encodeURIComponent(email); 

    req.open("POST","/scripts/addemail.php"); 

    req.setRequestHeader(
     'Content-Type', 
     'application/x-www-form-urlencoded; charset=UTF-8'); 

    req.send(email); 

    req.onreadystatechange=function() { 

     if(req.readyState==4) { 

      result = req.responseText; 

      alert("The length of the email is:" + result); 

     } 

    } 

    return false; 

} 

РНР (addemail.php):

<?php 
function check_email($input) { 
    return strlen($input); 
} 
$email = urldecode(implode(file('php://input'))); 
$result = check_email($email); 
echo $result; 
?> 

И да, я включала JS в раздел. Я получил это почти непосредственно из учебника, поэтому я не уверен, что происходит. Мой браузер тестирования - Safari, но я также пробовал FF. Извините, это очевидно, так как это моя первая попытка AJAX. Благодаря!

EDIT: Извините, проблема в том, что он просто переходит к файлу, описанному в action = "addemail_fb" вместо JS.

-iMaster

+0

Вы действительно хотите описать проблему? –

+0

Не унывайте, вы получите это; однако людям гораздо легче помочь, если вы расскажете, что происходит, и как это отличается от того, что вы ожидаете. Много раз, формируя вопрос таким образом, вы получаете ответ, который вы ищете. – tempire

ответ

2

Изменение onclick обработчик onsubmit (по форме), например так:

<form onsubmit="return check(this.email.value);"> ... </form> 

Кроме того, установите req.onreadystatechange перед вызовом req.send()

+0

Удивительный! Спасибо!!! – williamg

0

Вот проблема:

You are doing it wrong. 

И jQuery это ответ.


Но серьезно. Попробуйте использовать jQuery, так как это сделает жизнь Javascript проще, чем нарезать кусок тыквенного пирога.

AJAX является одним из самых раздражающих предметов в Javascript, а jQuery, наряду с другими библиотеками, ушел и затруднил проблему. Кроме того, есть много других замечательных функций jQuery, которые просто делают его намного более прекрасным для работы с Javascript.

В JQuery, весь код будет выглядеть следующим образом:

$.post("/scripts/addemail.php", {email_address:email}, function(data){ 
    alert("The length of the email is:"+data); 
}); 

Говоря тыквенный пирог .....


Теперь, когда я закончил свое заявление общего сервера для JQuery, вам нужно будет проверить консоль Javascript (Ctrl + Shift + J в Firefox) и запустить страницу. Это даст вам любые ошибки, которые вы обязаны иметь, например, синтаксические ошибки или другие другие ошибки.

Если вы можете пойти туда, а затем дать нам всплывающее сообщение об ошибке, мы с большей вероятностью разрешим вашу проблему.

+0

ok, нашел некоторые, но то, что я не получаю, - это как проверить скрипт. например, если возвращается значение «1», если это возвращается «2», сделайте это? – williamg

+0

Я не согласен. Играйте с javascript сами по себе. Вам не нужно быть экспертом, но, по крайней мере, осваивать основы, прежде чем начинать маскировать все с помощью фреймворка вроде jQuery. ПОСЛЕ ТОГО, однако, получите jQuery и сэкономить много времени. –

+0

Дело в том, что мне нужно использовать некоторый jQuery, чтобы отображать некоторые причудливые сообщения об ошибках (не очень интересные, только некоторые слайды). Есть ли способ использовать jQuery и простой ole 'javascript? Я пробовал, и это не сработало, хотя я очень легко мог ошибиться. – williamg

1

встроенный браузер плохая практика. это решение может показаться немного более запутанным, но если вы его внедрите в остальные ваши скрипты, то вы найдете это гораздо более элегантным. библиотеки JS используют подобные методы, но если вы не можете использовать один, то сделать это вместо того, чтобы:

onDomReady(function(){ 

    var oForm = document.getElementById("myform"); 

    addListener(oForm,"submit",function(){ 

     removeListener(oForm,"submit",arguments.callee); 
     // do stuff here 

    }); 

}); 

// Cross-browser implementation of element.addEventListener() 
function addListener(element, type, expression, bubbling) 
{ 
    bubbling = bubbling || false; 

    if(window.addEventListener) { // Standard 
     element.addEventListener(type, expression, bubbling); 
     return true; 
    } else if(window.attachEvent) { // IE 
     element.attachEvent('on' + type, expression); 
     return true; 
    } else return false; 
} 

// Cross-browser implementation of element.removeEventListener() 
function removeListener(element, type, expression, bubbling) 
{ 
    bubbling = bubbling || false; 

    if(window.removeEventListener) { // Standard 
     element.removeEventListener(type, expression, bubbling); 
     return true; 
    } else if(window.detachEvent) { // IE 
     element.detachEvent('on' + type, expression); 
     return true; 
    } else return false; 
} 

function onDomReady(fn) { 

    // Mozilla, Opera and webkit nightlies currently support this event 
    if (document.addEventListener) { 

     // Use the handy event callback 
     document.addEventListener("DOMContentLoaded", function(){ 

      document.removeEventListener("DOMContentLoaded", arguments.callee, false); 
      fn(); 


     }, false); 

    // If IE event model is used 
    } else if (document.attachEvent) { 

     // ensure firing before onload, 
     // maybe late but safe also for iframes 
     document.attachEvent("onreadystatechange", function(){ 
      if (document.readyState === "complete") { 
       document.detachEvent("onreadystatechange", arguments.callee); 
       fn(); 
      } else {  
       setTimeout(arguments.callee, 0); 
       return; 
      } 
     }); 

    } else { 

     // A fallback to window.onload, that will always work 
     addListener(window,"load",fn); 

    } 

} 
+0

Хмм, я посмотрю на это. Я также попытаюсь переписать его в jQuery, так как мой сайт использует все остальное. Благодаря! Хотя этот код предназначен только для сбора адресов электронной почты на ближайшей странице, ничего постоянного. – williamg

Смежные вопросы