在javascript控制台中从php输出数组

在javascript控制台中从php输出数组,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我有一个简单的ajax脚本,它将3个变量发送到一个外部php脚本,然后将它们添加到一个数组中并发送回数组,我希望它在javascript控制台中输出,这样我就可以检查变量是否被成功传回,但是当我运行脚本时,控制台中没有显示任何内容,只有 XHR finished loading: "http://localhost/blank/scripts/ajax/profile_password_submit.php". 这里是ajax $("#pro_content_password").submi

我有一个简单的ajax脚本,它将3个变量发送到一个外部php脚本,然后将它们添加到一个数组中并发送回数组,我希望它在javascript控制台中输出,这样我就可以检查变量是否被成功传回,但是当我运行脚本时,控制台中没有显示任何内容,只有

XHR finished loading: "http://localhost/blank/scripts/ajax/profile_password_submit.php". 
这里是ajax

$("#pro_content_password").submit(function() {

    var url = "scripts/ajax/profile_password_submit.php"; // the script where you handle the form input.
    var js_array=new Array();
    $.ajax({
           type: "POST",
           url: url,
           data: $("#pro_content_password").serialize(), // serializes the form's elements.
           success: function(data){

                js_array=data;

                console.log(js_array);

             },
             dataType: 'json'
         });

    return false; // avoid to execute the actual submit of the form.
});
下面是外部php脚本

    session_start();
  include '../../connect.php';

  $user_id = "";
  $user_id = $_SESSION['userId'];
  echo $user_id;
 if(empty($_SESSION['userId'])){

     echo "user id session not set";
     exit;
  }


$old_password = $_POST['pro_content_password_old'];
$new_password = $_POST['pro_content_password_new'];
$new_password1 = $_POST['pro_content_password_verify'];


$password_array = array("old"=>$old_password,"new"=>$new_password, "new1"=>$new_password1);


echo json_encode($password_array);

有什么想法吗?另外,我正在使用Google Chrome控制台

您需要JSON.stringify:

$("#pro_content_password").submit(function() {

    var url = "scripts/ajax/profile_password_submit.php"; // the script where you handle the form input.
    var js_array=new Array();
    $.ajax({
           type: "POST",
           url: url,
           data: $("#pro_content_password").serialize(), // serializes the form's elements.
           success: function(data){

                js_array=JSON.stringify(data);

                console.log(js_array);

             },
             dataType: 'json'
         });

    return false; // avoid to execute the actual submit of the form.
});

看起来您没有输出正确的JSON对象。事实上我不知道,因为你没有分享你的PHP脚本输出的内容,但我有一种感觉,那就是这一行导致了你的问题:

echo $user_id;
您不仅输出JSON编码的PHP数组,还输出
$user\u id
变量

jQuery的ajax成功回调只有在接收到格式正确的JSON对象时才会触发,而您的JSON对象不是。它可能看起来更像这样:


1234{“old”:“oldpass”,“new”:“newpass”,“new1”:“newpass1”}

这是现在的最终工作版本,它与我原来的版本有很大不同,但效果更好

    <script type="text/javascript">
function submit_profile_password(){
    //var results = document.getElementById("results");
    var result_error = document.getElementById("pro_content_error_password");
    var old_error = document.getElementById("pro_password_old_comment");
    var new_error = document.getElementById("pro_password_new_comment");
    var new1_error = document.getElementById("pro_password_new1_comment");

    var oldPass = document.getElementsByName("pro_content_password_old")[0].value;
    var newPass = document.getElementsByName("pro_content_password_new")[0].value;
    var new1Pass = document.getElementsByName("pro_content_password_verify")[0].value;
    var vars = "oldPass="+oldPass+"&newPass="+newPass+"&new1Pass="+new1Pass;

    var hr = new XMLHttpRequest();
    hr.open("POST", "scripts/ajax/profile_password_submit.php", true);
    hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    hr.onreadystatechange = function() {
        if(hr.readyState == 4 && hr.status == 200) {
            var data = JSON.parse(hr.responseText);
            //results.innerHTML = "";

            for(var obj in data){
                if(obj == "old"){
                    old_error.innerHTML = "";
                    old_error.innerHTML = data[obj];

                }else if(obj == "new"){
                    new_error.innerHTML = "";
                    new_error.innerHTML = data[obj];

                }else if(obj == "new1"){
                    new1_error.innerHTML = "";
                    new1_error.innerHTML = data[obj];

                }else if(obj == "result"){
                    result_error.innerHTML = "";
                    result_error.innerHTML = data[obj];

                }

                //alert("Key = "+obj+"value = "+data[obj]+"");

            }
        }
    }
    hr.send(vars);
    //results.innerHTML = "requesting...";
    return false; 
}





</script>

函数提交\配置文件\密码(){
//var results=document.getElementById(“结果”);
var result_error=document.getElementById(“pro_内容_错误_密码”);
var old_error=document.getElementById(“pro_password_old_comment”);
var new_error=document.getElementById(“pro_password_new_comment”);
var new1_error=document.getElementById(“pro_password_new1_comment”);
var oldPass=document.getElementsByName(“pro\u内容\u密码\u旧”)[0]。值;
var newPass=document.getElementsByName(“pro\u content\u password\u new”)[0]。值;
var new1Pass=document.getElementsByName(“pro\u内容\u密码\u验证”)[0]。值;
var vars=“oldPass=“+oldPass+”&newPass=“+newPass+”&new1Pass=“+new1Pass;
var hr=新的XMLHttpRequest();
打开(“POST”,“scripts/ajax/profile\u password\u submit.php”,true);
hr.setRequestHeader(“内容类型”、“应用程序/x-www-form-urlencoded”);
hr.onreadystatechange=函数(){
如果(hr.readyState==4&&hr.status==200){
var data=JSON.parse(hr.responseText);
//results.innerHTML=“”;
for(数据中的var obj){
如果(obj==“旧”){
old_error.innerHTML=“”;
old_error.innerHTML=数据[obj];
}否则如果(obj==“新”){
新建_error.innerHTML=“”;
new_error.innerHTML=数据[obj];
}否则如果(obj==“新1”){
new1_error.innerHTML=“”;
new1_error.innerHTML=数据[obj];
}否则如果(obj==“结果”){
结果_error.innerHTML=“”;
结果_error.innerHTML=数据[obj];
}
//警报(“Key=“+obj+”value=“+data[obj]+”);
}
}
}
人力资源发送(vars);
//results.innerHTML=“请求…”;
返回false;
}

谢谢大家的帮助

您只需要执行console.log而不是document.write吗?您确定一切正常吗?尝试将“exit('ok');”作为php文件的第一行。然后在开发人员工具中打开“网络选项卡”,并尝试观察请求的响应。如果有您的“ok”,那么您可以尝试var_dump()。。。如果没有-让我们看看more.document.write也没有做什么,我已经用脚本正确地传递了其他变量,只是没有数组ok,我测试了
exit(ok)
,结果显示正确,所以它尝试了
var\u dump($password\u array)
,并在网络区域的某个preivew部分正确地显示了数组,那么这是否意味着javascript部分存在问题?这意味着scripts/ajax/profile\u password\u submit.php没有返回数据。您可以在“网络”选项卡中调试,只需单击展开调用,您就会看到数据。是的,当我在php脚本中转储数组时,我可以在“网络”选项卡中看到正确的数组,但是什么会导致它不显示在javascript中?您是否添加了标题('Content-Type:application/json');并输出数据:echo json_encode($arr)。。请注意,页面不应包含任何其他内容,否则会破坏JSON格式不,我没有在页眉中添加,页面上还有很多其他代码,如html、php等。输出应仅包含JSON字符串,不包含html标记等。嗨,我注释掉了用户_id的回声,但它仍然没有显示在控制台的数组中,仅在chrome开发工具的网络部分