2014-10-11 80 views
0

我在下面的代码工作,PHP和我试图传递给PHP代码名为“stName”输入文本的内容:传递表单值从JS功能

<!DOCTYPE html> 
<html><head> 
<meta charset="utf-8"> 
<title>Untitled Document</title> 
<link rel="stylesheet" type="text/css" href="jquery.mobile-1.4.4.min.css"> 

<script src="jquery-1.11.1.min.js"></script> 
<script src="jquery.mobile-1.4.4.min.js"></script> 
<script type="text/javascript" charset="utf-8" src="cordova.js"></script> 
<script charset="utf-8" type="text/javascript"> 
function connect() 
{ 
    $.ajax({ 
     url:'hostname/reply.php', 
     headers:{"Content-Type": "application/json"}, 
     type:'POST', 
     data:$('form').serializeArray(), 
     //data:$(this), 
     dataType:'JSON', 
     error:function(jqXHR,text_status,strError){ 
      alert(strError);}, 
     timeout:60000, 
     success:function(data){ 
      $("#result").html(""); 
       for(var i in data){ 
       $("#result").append("<li>"+data[i]+"</li>");      
       } 
      } 
     });  
} 
</script> 
</head> 
<body> 
<center><b>My Students</b></center> 
<center> 
<form> 
<input type="text" value="Joe" name ="stName" /> 
<input onclick="connect()" type="button" value="showStudents" /> 
</form> 
</center> 
<center><b>Results</b></center> 
<ul data-role="listview" id="result"></ul> 
</body> 
</html> 

而简单的PHP代码是:

<?php  
    $data = json_decode($_POST['data'], true); 
    $message[] = $data; 
    print json_encode($message); 
?> 

访问数据库的代码已被删除。我只想访问表单值,它不工作。有什么建议吗?

+0

数据必须是关键值对 – loveNoHate 2014-10-11 11:04:06

回答

0

Ajax与发送表单时通过操作属性执行的操作没有区别: 它对某个URL执行HTTP请求。对于POST请求,默认是发送的查询字符串的请求的主体形式:

key1=value1&key2=value2 

你知道,这个从网址为以后的部分?字符。

对于$ .ajax函数的参数数据,您恰好传递此查询字符串。但是,您也可以传递一个对象,该对象会自动转换为查询字符串。例如,你的表格数据可以表示为这个对象:

{ 
    stName: "Joe" 
} 

而且,它还将通过$就被转换成查询字符串和Ajax请求的正文发送:

stName=Joe 

这查询字符串也将被发送到您的脚本,您会使用表单元素的action属性。

在您的PHP脚本中,您可以通过$ _POST数组访问参数,查询字符串中的键是$ _POST数组中的键。例如,要打印出stName参数:

echo $_POST["stName"]; 

这一切都没有什么太大的做JSON。事实上,为了使用Ajax,你不需要JSON。在许多情况下发送查询字符串已足够。您的代码可以这样改写:

function connect() 
{ 
    $.ajax({ 
     url:'hostname/reply.php', 
     type:'POST', 
     data: { 
      stName: $('#name-input').val() // Give the input an id 
     }, 
     error:function(jqXHR,text_status,strError){ 
      alert(strError);}, 
     timeout:60000, 
     success:function(data){ 
      // JSON is decoded for you if Content-Type of response is set appropriately. 
     });  
} 
+0

谢谢阿里所有的澄清。我正在尝试这个:data:{stName:“Joe”},在函数和$ message [] = $ _POST [“stName”]; print json_encode($ message);在php代码中。我期待得到“乔”,但返回null。请发表评论吗? – Simon 2014-10-11 15:15:58

+0

PHP的'json_encode'在错误时返回null,但是null也是一个有效的JSON值。请使用'json_last_error'或'json_last_error_msg'检查错误(请参阅php.net上的文档)。您还可以使用浏览器提供的工具(在Firefox Ctrl + Shift + Q中)检查发送到服务器的内容。 – 2014-10-11 16:01:32

+0

嗨阿里,我收到这条消息:“未捕获的SyntaxError:意外的令牌<”。我不知道哪里出了问题。有什么建议么? – Simon 2014-10-13 17:23:04