ajax POST数组有多个电子邮件到php验证,但验证/ PHP功能不起作用

时间:2014-04-01 21:32:01

标签: php jquery ajax arrays

实际上我正在向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]);
   }
 },

谢谢&问候

3 个答案:

答案 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或只是一个状态,我真的不清楚吗?