2014-02-04 5 views
0

У меня есть простой сценарий ajax, который отправляет 3 переменные во внешний php-скрипт, затем добавляет их в массив и отправляет массив обратно, и я хочу, чтобы он выводил его на консоль javascript , так что я могу проверить, что переменные передается обратно успешно, однако, когда я не запустить скрипт ничего появляется в консоли, только чтоВывод массива из php в javascript-консоли

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

Вот Аякса

$("#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 консоль

+0

Вам просто нужно сделать console.log вместо document.write? – edmondscommerce

+0

Вы уверены, что все работает правильно? Попробуйте поставить «exit (« ok »); как первая строка в вашем php-файле. Затем откройте вкладку «Сеть» в разделе «Инструменты для разработчиков» и попытайтесь просмотреть ответ запроса. Если есть «ok», вы можете просто попробовать var_dump() ... Если нет - посмотрим больше. –

+0

document.write ничего не делает, и я правильно передал другие переменные скрипту, просто не массивы – Arken

ответ

0

Вот окончательный рабочий вариант сейчас, его много отличается от моего оригинала, но это работает намного лучше

<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> 

Спасибо всем за помощь

0

Вам нужно 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. 
}); 
+0

, который до сих пор ничего не показывает в журнале консоли – Arken

+0

, это означает, что скрипты/ajax/profile_password_submit.php не возвращают данные. Вы можете отладить это на вкладке «Сеть», просто нажмите, чтобы развернуть вызов, и вы должны увидеть данные. –

+0

Да, я могу видеть правильный массив, отображающийся на вкладке сети, когда я var_dump массив в php-скрипте, но что бы это заставило его не отображаться в javascript? – Arken

1

Похоже, вы не выводя правильный объект JSON. Я не знаю, на самом деле, так как вы не поделились, что ваш PHP скрипт вывода, но у меня есть ощущение, что эта линия в том, что это то, что вызывает у вас проблемы:

echo $user_id; 

Вы не только выводя JSON-кодированный PHP-массив, вы также выводите переменную $user_id.

Обратный вызов jQuery's ajax только срабатывает, если он получает правильно отформатированный объект JSON, который у вас нет. Это, вероятно, выглядит примерно так:

1234{"old": "oldpass", "new": "newpass", "new1": "newpass1"}

+0

Привет, я прокомментировал эхо пользователя user_id, но он все еще не отображается в массиве в консоли, только в сетевой раздел инструментов разработчика в хроме – Arken

Смежные вопросы