JQuery AJAX пост в PHP - PullRequest
       4

JQuery AJAX пост в PHP

6 голосов
/ 05 ноября 2010

ОК, я построил мою строку json, но я не уверен, что делать дальше ??

$('#submit').live('click',function(){ 

                var dataString = '[';
                    $('#items tr').not(':first').each(function(){
                        var index = $('#items tr').index(this);
                        var supp_short_code=$(this).closest('tr').find('.supp_short_code').text();
                        var project_ref=$(this).closest('tr').find('.project_ref').text();
                        var om_part_no=$(this).closest('tr').find('.om_part_no').text();
                        var description=$(this).closest('tr').find('.description').text();
                        var cost_of_items=$(this).closest('tr').find('.cost_of_items').text();
                        var cost_total=$(this).closest('tr').find('.cost_total').text();
                        dataString += '{"row":"' + index + '", "supp_short_code":"' + supp_short_code + '", "project_ref":"' + project_ref + '", "om_part_no":"' + om_part_no + '", "description":"' + description + '", "cost_of_items":"' + cost_of_items + '", "cost_total_td":"' + cost_total + '"}';
                    });
                    dataString += ']';

                $.ajax
                    ({
                    type: "POST",
                    url: "order.php",
                    data: dataString,
                    cache: false,
                    success: function()
                        {
                            alert("Order Submitted");
                        }
                    });
            });

В моем php-файле я пытался записать dataString в текстовый файл, поэтому ямог видеть, что это проходит хорошо, но ничего не было в текстовом файле !?Я делаю что-то не так на стороне клиента или PHP, мой код php:

<?php
    $stringData = $_POST['dataString']; 
    $myFile = "testFile.txt";
    $fh = fopen($myFile, 'w') or die("can't open file");
    fwrite($fh, $stringData);
    fclose($fh);
?>

Ответы [ 5 ]

9 голосов
/ 05 ноября 2010

Почему бы вам не попытаться построить ваши данные следующим образом

var postData = {};
$('#items tr').not(':first').each(function(index, value) {
    var keyPrefix = 'data[' + index + ']';
    postData[keyPrefix + '[supp_short_code]'] = $(this).closest('tr').find('.supp_short_code').text();
    postData[keyPrefix + '[project_ref]'] = $(this).closest('tr').find('.project_ref').text();
    // and so on
});

Тогда в вашем AJAX вызове

data: postData,

Теперь ваш PHP-скрипт может обрабатывать данные в виде многомерного массива

<?php
if (isset($_POST['data']) && is_array($_POST['data'])) {
    foreach ($_POST['data'] as $row => $data) {
        echo $data['supp_short_code'];
        echo $data['project_ref'];
        // and so on
    }
}
9 голосов
/ 05 ноября 2010

Это должно сделать это:

...
$.ajax({
    type: "POST",
    url: "order.php",
    data: { 'dataString': dataString },
    cache: false,
    success: function()
        {
            alert("Order Submitted");
        }
    });

Вы можете попробовать проверить:

<?php
    $stringData = $_POST['dataString']; 
    echo $stringData;
?>
4 голосов
/ 12 сентября 2012

Сначала преобразуйте объект json в строку в формате js следующим образом:

var json_string=JSON.stringify(json_object);

Затем передайте его PHP как строку, а затем в php декодируйте его следующим образом:

<?php  
    $map = json_decode($_POST['json_string']); 
?> 

Надеюсь, это поможет кому-нибудь просто найти эту тему ...

1 голос
/ 05 ноября 2010

Проблема будет в том, что вы пытаетесь получить доступ к переменной POST с именем dataString, которая не существует. Тот факт, что вы устанавливаете свойство data для содержимого переменной с именем dataString, не означает, что ваша переменная post будет называться dataString.

Вы можете попробовать это:

data: { "dataString": dataString },

Это передает объект в функцию jQuery со свойством dataString и значением вашей фактической строки данных. jQuery возьмет все свойства из этого объекта (в данном случае только одно) и установит их как переменные post в HTTP-запросе, который он в конечном итоге отправит вашему PHP-приложению. Это позволяет получить доступ к данным с помощью вызова $ _POST ["dataString"].

Steve

0 голосов
/ 17 июня 2013

У меня проблемы при использовании:

url: "/folder/form.php",

И я должен использовать:

url: "folder/form.php",,
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...