2014-10-26 3 views
0

Я пытаюсь опубликовать массив в javascript для переменной сеанса php с помощью JSon. Я много искал, есть 3 способа публикации; HTML-форма Проводка, AJAX и файлы cookie. Я хочу опубликовать, отправив запрос, в моем сценарии я не могу преобразовать свой массив в объект JSon. Затем я попытался отправить его на php-страницу следующим образом;Отправлять данные JSon из javascript в php

$('#firstConfirmButton').click(function(){ 

    var json_text = JSON.stringify(ordersArray, null); 
    alert(json_text.toString()); 

    request= new XMLHttpRequestObject(); 
    request.open("POST", "test.php", true); 
    request.setRequestHeader("Content-type", "application/json"); 
    request.send(json_text); 

}); 

В test.php я попытался получить массив с помощью file_get_contents ('PHP: // ввод'), но это не сработало. Когда я пытаюсь выполнить эхо son_text, он показывает «firstConfirmButton =» вместо содержимого массива. Что мне делать?

<?php 

    require("includes/db.php"); 
    require("includes/functions.php"); 

    session_start(); 

    if (isset($_POST['firstConfirmButton'])) { 

     $json_text = \file_get_contents('php://input'); 
     echo $json_text; 

    } 

>

ответ

0

Как вы используете JQuery, использовать AJAX функции JQuery для лучшей совместимости с браузерами:

$('#firstConfirmButton').click(function(){ 

    $.post("test.php", { data: ordersArray }, function(response){      
       // success callback 
       // response variable can be used for response from PHP, if any 
    }); 
}); 

В вашем PHP код:

print_r($_POST['data']); 

Пожалуйста обратите внимание, что ordersArray должен быть действительным JSON. Затем вы можете использовать переменные в PHP в соответствии с вашими потребностями.

+0

thnks для ответа, но что означает u с «успешным обратным вызовом», есть ли необходимость кодировать в этом блоке? – user3235456

+0

, если вы хотите что-то вернуть в ответ и исходя из того, что вы хотите что-то сделать, этот код перейдет к успешному обратному вызову. переменная 'response' предоставит вам ответные данные. –

+0

Я не могу отправить успешный запрос с указанным выше кодом, хотя мой orderArray действителен. Я пытаюсь сначала использовать ordeArray как массив, а во-вторых, я использовал var json_text = JSON.stringify (ordersArray, null); и отправить json_text в качестве данных. Но оба они не работали. – user3235456

0

Я ценю ответ Apul, но вы пропустили нечто, которые вызывают проблемы, сделайте следующее:

Способ 1 (рекомендуется):

$('#firstConfirmButton').click(function(){ 

var json_text = JSON.stringify(ordersArray, null); 
alert(json_text.toString()); 

var request; 
var XMLHttpFactories = [ 
    function() {return new XMLHttpRequest()}, 
    function() {return new ActiveXObject("Msxml2.XMLHTTP")}, 
    function() {return new ActiveXObject("Msxml3.XMLHTTP")}, 
    function() {return new ActiveXObject("Microsoft.XMLHTTP")} 
]; 

function createXMLHTTPObject() { 
    var xmlhttp = false; 
    for (var i=0;i<XMLHttpFactories.length;i++) { 
     try { 
      xmlhttp = XMLHttpFactories[i](); 
     } 
     catch (e) { 
      continue; 
     } 
     break; 
    } 
    return xmlhttp; 
} 
function sendRequest(url,callback,postData) { 
    var req = createXMLHTTPObject(); 
    if (!req) return; 
    var method = (postData) ? "POST" : "GET"; 
    req.open(method,url,true); 
    req.setRequestHeader('User-Agent','XMLHTTP/1.0'); 
    if (postData) 
     req.setRequestHeader('Content-type','text/json'); 
     req.onreadystatechange = function() { 
      if (req.readyState != 4) return; 
      if (req.status != 200 && req.status != 304) { 
       alert('HTTP error ' + req.status); 
       return; 
      } 
     callback(req); 
    } 
    if (req.readyState == 4) return; 
    req.send(postData); 
} 

}); 

И, наконец, вызвать sendRequest функцию:

не
sendRequest('file.txt',handleRequest,ordersArray); 
function handleRequest(req) { 
    var writeroot = [some element]; 
    writeroot.innerHTML = req.responseText; 
} 

Метод 2 (ни один вопрос в использовании):

var xmlhttp; 
if (window.XMLHttpRequest) 
{// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
} 
else 
{// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
} 
xmlhttp.onreadystatechange=function() 
{ 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
     document.getElementById("myDiv").innerHTML=xmlhttp.responseText; 
    } 
} 
xmlhttp.open("POST","demo_post2.asp",true); 
xmlhttp.setRequestHeader("Content-type","text/json"); 
xmlhttp.send(ordersArray); 

Для чтения данных в PHP:

$json_text = file_get_contents('php://input'); 
echo json_decode($json_text); //I have changed the send data from `json_text` to the direct non-Stringified json object, the `ordersArray`. 

Разница между ними заключается в масштабируемости.

Примечание: Разница между моим и ответом Апуля заключается в jQuery, я не использовал его, он это сделал.

+0

Как я должен обрабатывать это на стороне php, я все равно не могу отправить данные. – user3235456

+0

@ user3235456 См. Мое редактирование. –

+0

Также ваш '' \\ 'может быть ошибкой в ​​начале' file_get_contents'. –

0

Апул прав относительно использования библиотеки AJAX. На стороне PHP, я получить "данные с помощью

$value = urldecode(file_get_contents('php://input'));

0

На самом деле я все еще пытаюсь решить эту проблему, и я думаю, что у меня есть некоторый прогресс. Может быть, у кого-то будет такая же проблема, надеюсь, это поможет ему. Во-первых, я изменил код javascript на это, особенно добавив, что «async: false» сохранил мою жизнь, потому что без этого обновления Safari и Firefoc не могут публиковать какую-либо переменную Json для php (Chrome в порядке). Мне потребовалось 2 дня, чтобы узнать это.

$('#firstConfirmButton').click(function(){ 


    var my_json_val = JSON.stringify(ordersArray, null); 
    alert(my_json_val.toString()); 

    $.ajax({ 
     type: "POST", 
     url: "gazanfer.php", 
     data: my_json_val, 
     cache: false, 
     contentType: false, 
     async: false, 
     processData: false, 
     success: function(data){ 
      //alert("---"+data); 
     alert("Settings has been updated successfully."); 
     window.location.reload(true); 
     } 
    }); 

}); 

Теперь публикация в порядке, но все же я не могу прочитать данные на стороне php. Я не знаю, почему, вот мой PHP-код. Есть идея?

<?php 


    require("includes/db.php"); 
    require("includes/functions.php"); 

    $my_json_encoded = $_POST['data']; 
    $my_json_val = json_decode($my_json_encoded); 
    echo $my_json_val; 

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