2011-06-04 227 views
2

所以我在纯PHP中工作得很好。当你点击提交时,表单被提交并且PHP页面被加载。所以我试图实现AJAX,以便在提交表单时不必重新加载页面,但现在变量永远不会到达PHP脚本。AJAX请求不起作用

下面是我得到了什么:

<form method="get" action="sms.php"> 
<input type="text" name="number" value="Phone number" /><br /> 
<textarea type="text" name="message" rows="5" cols="20"></textarea><br /> 
<input type="button" onclick="ajaxFunction()" value="Send" /> 
</form> 

的AJAX JS文件:

function ajaxFunction(){ 
    var ajaxRequest; 

    try{ 
     // Opera 8.0+, Firefox, Safari 
     ajaxRequest = new XMLHttpRequest(); 
    } catch (e){ 
     // Internet Explorer Browsers 
     try{ 
      ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP"); 
     } catch (e) { 
      try{ 
       ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP"); 
      } catch (e){ 
       // Something went wrong 
       alert("Your browser broke!"); 
       return false; 
      } 
     } 
    } 
    // Create a function that will receive data sent from the server 
    ajaxRequest.onreadystatechange = function(){ 
     if(ajaxRequest.readyState == 4){ 
      var ajaxDisplay = document.getElementById('confirm'); 
      ajaxDisplay.innerHTML = ajaxRequest.responseText; 
     } 
    } 
    var number = document.getElementById('number').value; 
    var message = document.getElementById('message').value; 
    var queryString = "?number=" + number + "&message=" + message; 
    ajaxRequest.open("GET", "sms.php" + queryString, true); 
    ajaxRequest.send(null); 
} 

最后的PHP脚本:

<?php 
$number = $_GET["number"]; 
$message = $_GET["message"]; 

$client = new SoapClient('http://sms2.cdyne.com/sms.svc?wsdl'); 
$param = array(
    'PhoneNumber' => $number, 
    'LicenseKey' => 'xxxxxxxxxxxxxxxxxxxxxxxx', 
    'Message' => $message, 
    ); 

echo "SMS sent."; 
?> 
+2

你应该完全放弃并使用jQuery。 – Fosco 2011-06-04 22:58:35

+1

如果您更愿意使用[jQuery的AJAX](http://api.jquery.com/jQuery.ajax/)方法,它会让您的生活更轻松 – 8bitme 2011-06-04 23:00:04

+0

@Fosco和@ 8bitme告诉别人使用jQuery不是答案。 – james 2011-06-04 23:01:35

回答

2

您使用的getElementById()来获取的元素:

var number = document.getElementById('number').value; 
var message = document.getElementById('message').value; 

但是,你的HTML元素没有ID的。更新他们是这样的:

<input type="text" ID="number" value="Phone number" /><br /> 
<textarea type="text" ID="message" rows="5" cols="20"></textarea><br /> 

或更改您的JavaScript以使用getElementByName()。

然而,如果添加jQuery是一个选项,也可能是这种简单:

<input type="text" id="number" value="Phone number" /><br /> 
<textarea type="text" id="message" rows="5" cols="20"></textarea><br /> 
<input type="button" id="submitform" value="Send" /> 

<script> 
$(document).ready(function() { 
    $('#submitform').click(function() { 
    var num = $('#number').value(); 
    var msg = $('#message').value(); 
    $.get('sms.php',{number: num, message: msg}, function(response) { alert(response); }); 
    }); 
}); 
</script> 

即巨ajaxFunction()将被通过使用jQuery〜8行JS的替换。

0

打开萤火虫,开启持续。点击按钮并检查传出的请求。确保你正在发送数据。另外在你的PHP脚本中做一个$ _REQUEST的转储。在萤火虫中检查这个。