实际上我正在向PHP发送一个包含多个数组的数组,并使用ajax进行验证{登录或注销}。
HTML / JQ:
var arr = ['one@one.com','two@two.com','three@three.com',four@four.com' ....];
$.ajax({
url: "verify.php?action=email",
type: "post",
data: "email="+arr,
dataType: "json",
cache: false,
success: function(response){
alert(response.status);
},
error: function(jqXHR,textStatus,errorThrown){
alert(textStatus);
}
});
PHP:
define('INCLUDE_CHECK',true);
include('functions.php');
header('Content-Type: application/json');
$data = array();
switch($_GET['action']) {
case 'email':
$items[] = explode(',', $_POST['email']);
foreach($items as $key){
$n[] = getStatus($key); // getStatus function is defined in "functions.php"
}
$data['status'] = $n;
break;
}
echo json_encode($data);
现在的问题是:它每次都返回null,而不是“在线”或“离线”。但如果我只传递一封电子邮件,效果会很好。像:
$n = getStatus('one@one.com');
$data['status'] = $n;
任何解决方案......
thnks&问候
更新:
在手动操作数组时它的工作原理:
$items = array('one@one.com','two@two.com'....);
foreach($items as $key){
$n = getStatus($key);
$data['status'] = $n;
}
和ajax for loop
函数中的success
。
但我想将数组从jquery传递给php
更新:答案
$items = explode(',', $_POST['email']);
foreach($items as $key){
$data['status'][] = getStatus($key);
}
用jQ:
success: function(response){
for(var i in response.status){
alert(response.status[i]);
}
},
谢谢&问候
答案 0 :(得分:0)
你需要做
$items[] = explode(',', json_decode($_POST['email']));
假设您的功能正常,应该可以正常工作。
修改强>
switch($_GET['action']) {
case 'email':
$items[] = explode(',', $_POST['email']);
$n = array(); //add this
for($x=0;$x<count($items);$x++){
$n[$x] = getStatus($key); // getStatus function is defined in "functions.php"
}
//$data['status'] = $n;
break;
}
echo json_encode($n);
将所有其他代码恢复正常,但将alert(response.status);
更改为alert(response);
答案 1 :(得分:0)
您是否使用F12工具检查了响应的状态?可能是你的PHP错误输出并且从不返回值(除了500状态代码),这可能是原因:
data: "email="+arr
arr
是一个JavaScript数组,如['blah1','blah2','blah3']
。转换为字符串后,您将获得blah1,blah2,blah3
。
由于您传递的是附加到"email="
的arr,因此最终会出现email=one@one.com,two@two.com,three@three.com
之类的内容。由于您传递了string
作为data
值,因此JQuery可能正在将其作为原始POST主体提供,并且PHP可能很难解析它。
如果您使用此语法,它应该按预期工作:
var arr = ['one@one.com','two@two.com','three@three.com',four@four.com' ....];
$.ajax({
url: "verify.php?action=email",
type: "post",
data: { email: arr.toString() },
dataType: "json",
cache: false,
success: function(response){
alert(response.status);
},
error: function(jqXHR,textStatus,errorThrown){
alert(textStatus);
}
});
答案 2 :(得分:0)
我并不清楚你要做什么。
这样的东西?
define('INCLUDE_CHECK',true);
header('Content-Type: application/json');
$data = array();
$items = array();
switch($_GET['action']) {
case 'email':
$items = explode(',', $_POST['email']);
foreach($items as $key){
$data['status'][] = "bar"; // getStatus function is defined in "functions.php"
}
break;
}
echo json_encode($data);
将所有状态的数组发送回jQuery。
在本地测试并使用您的HTML代码。 答复是:
{"status":["bar","bar","bar","bar"]}
如果你想将一个包含所有状态的数组发送到jQuery或只是一个状态,我真的不清楚吗?