我正在为客户开发项目,他们希望能够根据注册人身份作为会员/非会员或学生动态更新费用列表。所以我认为AJAX是最好的方法,但我的实现遇到了麻烦。每次我发送我的对象时,我都会收到语法错误。我已将代码放在下面。
的JavaScript
function checkMember(){
var member = document.getElementById("user_mem_id");
if(member.value == "" || member.value.trim() == ""){
document.getElementById("testError").innerHTML = "Please enter a membership id<br>";
document.getElementById("testError").style.color = "red";
}else{
var json = { "data":[{"membership_id":member.value}]}
var xmlHttp = false;
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");// For Old Microsoft Browsers
}catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");// For Microsoft IE 6.0+
}catch (e2) {
xmlHttp = false;// No Browser accepts the XMLHTTP Object then false
}
}
if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
xmlHttp = new XMLHttpRequest();//For Mozilla, Opera Browsers
}
xmlHttp.open("POST","member_check.php",true);
xmlHttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlHttp.send("data=" + json);
xmlHttp.onreadystatechange=function(){
if (xmlHttp.readyState==4 && xmlHttp.status==200){
document.getElementById("testError").innerHTML=xmlHttp.responseText;
console.log(xmlHttp.responseText);
json_last_error;
};
};
}
}
PHP
<?php
if(isset($_POST["data"]))
{
$data = $_POST["data"];
$res = json_decode($data, true);
echo $data[membership_id];
}
另一个问题是,当我尝试访问数据数组的成员资格“单元格”时,我从设置字符串中获取非法。因此我认为我已经错误地声明了我的原始JSON对象,但是我出现了(因为我在这里看到了很多例子,而且在那里),我已经正确地声明了这一点。
答案 0 :(得分:2)
我认为您需要使用stringify才能成功执行帖子。
var json = { "data":[{"membership_id":member.value}]};
json_data = JSON.stringify(json);
然后在你的ajax调用中使用json_data。
答案 1 :(得分:1)
您的代码存在很多问题。正如我在给你的第一条评论中所述,你需要先将json转义为在查询字符串中发送之前,因为json转换为字符串,而没有应用任何特殊规则变成[object Object]
,这不是有效的json,也不是这样解析的。
为此,请使用JSON.stringify(json);
。例如:
function checkMember(){
var member = document.getElementById("user_mem_id");
if(member.value == "" || member.value.trim() == ""){
document.getElementById("testError").innerHTML = "Please enter a membership id<br>";
document.getElementById("testError").style.color = "red";
}else{
var json = { "data":[{"membership_id":member.value}]}
var xmlHttp = false;
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");// For Old Microsoft Browsers
}catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");// For Microsoft IE 6.0+
}catch (e2) {
xmlHttp = false;// No Browser accepts the XMLHTTP Object then false
}
}
if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
xmlHttp = new XMLHttpRequest();//For Mozilla, Opera Browsers
}
xmlHttp.open("POST","member_check.php",true);
xmlHttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlHttp.send("data=" + JSON.stringify(json));
//json turned into proper string
//I should also note, you should url-encode this string if it contains
//any special characters using encodeURIComponent()
xmlHttp.onreadystatechange=function(){
if (xmlHttp.readyState==4 && xmlHttp.status==200){
document.getElementById("testError").innerHTML=xmlHttp.responseText;
console.log(xmlHttp.responseText);
//json_last_error; //Commented this out, as it will
//echo an error, causing the script to halt, as it doesn't
//exist.
};
};
}
}
其次,您发送一个对象,其关键字'data'包含一个对象数组..而不是一个简单的对象:
<?php
if(isset($_POST["data"]))
{
$data = $_POST["data"];
$res = json_decode($data, true);
echo $data[membership_id]; // There are many things wrong here
// ^ ^ this is not a constant and likely does not exist.
// |- This is still your string, which doesn't work
}
<?php
if(isset($_POST["data"]))
{
$data = $_POST["data"];
$res = json_decode($data, true);
echo $res['data'][0]['membership_id'];
// ^ ^ ^ ^
// | |first item |-string
//The result|-string
}
希望我的评论是自我解释的..但是如果它们不是...... $ res是你的解码数组,'data'是该数组的第一个位置,0是该位置的数组的第一个位置,'membership_id'是您要访问的项目。您可以将成员作为字符串,索引作为整数访问。
答案 2 :(得分:1)
您的代码的基本问题是&#34 ;;&#34;定义变量时的终止符。检查以下行
json = {&#34; data&#34;:[{&#34; membership_id&#34;:member.value}]}
你还没有在结尾处加上分号。 (但它可能仍然会工作几次,但主要是它的错误)
相反,你也写了很多代码。我建议你使用jquery的$.ajax函数来简化你的任务。
如果您的json数据中只有成员资格ID,则更容易创建一个像下面那样的json对象
var json = {&#34; membership_id&#34; :member.value&#34; };
此外,您需要使用JSON.stringify(json)