Как отправить длинную строку через AJAX в JS на PHP - PullRequest
0 голосов
/ 19 декабря 2018

Я пытаюсь создать что-то вроде системы сообщений, которая позволит пользователям писать столько, сколько они хотят, в каждом сообщении.Но у меня проблема с передачей длинного жала через AJAX.Это всегда говорит об этом (длина ссылки слишком велика), поэтому я попытался разделить мою строку на несколько сегментов, перенести их один за другим и записать в текстовый файл (я не хочу использовать базу данных для хранения данных пользователей).будет писать) используя функцию PHP (fopen) с флагом (a) для продолжения записи, как показано ниже

fopen($directory,"a")

, также я использовал (encodeURIComponent), чтобы каждая часть длинной строки оставалась (\ n, пробелы, ... и т. д.), но то, что я получил в результате, было похоже на

например, то, что я написал

bla bla bla bla bla bla bla 

что я получил

bla bla bla SSbla bla bla b

какрешить эту проблему ??

мой код JS, где (d) - строка

function sendDetails(t){
    t = encodeURIComponent(t);
    var x = new XMLHttpRequest();
    x.open("POST","src/writeDetails.php?t="+t,true);
    x.send();
}
function writeDetails(d){
    var r = Math.floor(d.length / 1000);
    var m = d.length % 1000;
    for(i=0;i<r;i++){
        var p = d.slice(i*1000,i*1000+999);
        sendDetails(p);
    }
    if(i > 0){
        sendDetails(d.slice(i*1000,i*1000+m));
    }else{
        sendDetails(d.slice(0,m))
    }
}

мой код PHP

$t = $_REQUEST['t'];
$f = fopen($fileLink,"a");
fwrite($f,$t);
fclose($f);

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Насколько я понимаю, ваша проблема в том, что URI слишком длинный.См. этот вопрос, касающийся максимальной длины URI:

Если вы сохраните URL-адреса длиной менее 2000 символов, они будут работать практически в любой комбинации клиентского и серверного программного обеспечения.

Чтобы решить эту проблему, вам нужно будет отправить данные в теле запроса вместо части запроса URI:

function sendDetails(t){
    t = encodeURIComponent(t);
    var x = new XMLHttpRequest();
    x.open("POST", "src/writeDetails.php", true);

    var fd = new FormData();
    fd.append("t", t);
    x.send(fd);
}

Здесь - этоСпецификация API для XMLHttpRequest.send().

Обратите внимание, что в качестве тела запроса я использовал объект FormData, но вы можете выбрать другие подходящие для вас способы (например, JSON).

0 голосов
/ 19 декабря 2018

Ваш код неверный.Вместо этого проверьте этот код!

function sendDetails(t){
    t = encodeURIComponent(t);
    var x = new XMLHttpRequest();
    x.open("POST","src/writeDetails.php",true);
    x.send("t=" + t);
}

И ваш PHP должен быть таким:

if (isset($_POST['t']))
{
   $t = $_POST['t']; // This is your variable with the t param you passed with AJAX
}
...