2016-01-11 3 views
-1

Я использую файл backend.phpAjax запрос JSON без JQuery

echo json_encode(array('post' => $_POST)); 

И Javascript для Ajax запроса:

function ajax_(requst) { 
    requst = requst || {}; 
    var result = {}; 
    (function() { 
     var xhttp = window.XMLHttpRequest ? new XMLHttpRequest() : 
       new ActiveXObject("Microsoft.XMLHTTP"); 
     xhttp.onreadystatechange = function() { 
      if (xhttp.readyState === 4 && xhttp.status === 200) { 
       result = JSON.parse(xhttp.responseText); 
       //result = (xhttp.responseText); 
      } else { 
       result = { 
        error: 'status="'+xhttp.statusText+' ('+xhttp.status+')", state="'+xhttp.readyState+'"' 
       }; 
      } 
     }; 
     xhttp.open(requst.type || 'POST', 'backend.php', false); 
     xhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); 
     //xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
     xhttp.send(requst.data); 
    })(); 
    return result; 
} 

А также запроса с помощью

console.log('before'); 
console.log(ajax_({ 
    data: { 
     a: 1, 
     b: { 
      b1: [], 
      b2: {}, 
      b3: 'b3' 
     } 
    } 
})); 
console.log('after'); 

Как добиться того, на консоли отображаются

before 
Object { post: a: 1, b: {b1: [], b2: [], b3: 'b3'} 
after 
? 

Проблема в том, что отправка json не работает. Работает только с json из задней части.

+0

Мы должны были бы знать, что в '$ _POST', прежде чем мы могли бы попытаться разумный ответ. Пожалуйста, добавьте 'print_r ($ _ POST);' к вашему коду 'backend.php' и добавьте вывод к вашему вопросу. НЕ добавляйте его в качестве комментария, пожалуйста. – RiggsFolly

ответ

1

Вы не можете отправить объект в AJAX.

<script> 
    function ajax_(requst) { 
     requst = requst || {}; 
     var result = {}; 
     var xhttp = window.XMLHttpRequest ? new XMLHttpRequest() : 
     new ActiveXObject("Microsoft.XMLHTTP"); 
     xhttp.onreadystatechange = function() { 
      if (xhttp.readyState === 4 && xhttp.status === 200) { 
       result = JSON.parse(xhttp.responseText); 
       //result = (xhttp.responseText); 
      } else { 
       result = { 
        error: 'status="'+xhttp.statusText+' ('+xhttp.status+')", state="'+xhttp.readyState+'"' 
       }; 
      } 
     }; 
     xhttp.open(requst.type || 'POST', 'backend.php', false); 
     //xhttp.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); 
     xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
     xhttp.send('data='+JSON.stringify(requst.data)); 
     return result; 
    } 

    console.log('before'); 
    console.log(ajax_({ 
     data: { 
      a: 1, 
      b: { 
       b1: [], 
       b2: {}, 
       b3: 'b3' 
      } 
     } 
    })); 
    console.log('after'); 
</script> 

И для backend.php

<?php echo $_POST['data']; 
Смежные вопросы