отправка outerhtml с помощью json создает проблемы

#javascript #php #jquery

#javascript #php #jquery

Вопрос:

Я хочу отправить некоторые части исходного кода html с помощью ajax-вызова.

Если я определю данные, которые будут отправлены для вызова ajax таким образом:

 var content={};


content['mypart1']='my content 1';
content['mypart2']='my content 2';
content=JSON.stringify(content);
  

В консоли я вижу эту строку для отправки:

 ... , content: "{"mypart1":"my content 1","mypart2":"my content 2"}" ...
  

Это работает. После $test=json_decode($post['content']); у меня будет нужный массив частей моего контента.

Теперь мне нужно использовать его с реальными частями контента, поэтому я попробовал это;

 $("[myselector]").each(function(i, part) {
content['mypart1']=$(part)[0].outerHTML;
content['mypart2']=$(part)[0].outerHTML;
});
content=JSON.stringify(content);
  

Теперь я вижу в консоли, что требуемый html-код правильно находится внутри строки.

Но если я отправлю это, я увижу в консоли, что внутри строки есть несколько ///-знаков, и ключи также находятся внутри » now. "{"mypart1":"<div id=\"myid\" data-mydataid=\"123456\" class=\".....

Я думаю, что из-за этой ошибочной строки jason_decode не будет работать корректно.

$test=json_decode($post['content']);

С этими данными я не получу требуемый массив, $ test пуст.

Что вызвало множественные / / / -знаки и /-вокруг ключей и как я могу это предотвратить?

Большое спасибо за помощь и объяснение.

Может быть, мне нужно отменить сериализацию части outerhtml, прежде чем добавлять их в строку stringify?

Это вызов Ajax

 do_ajax_call({   
'content': content,
...
 });

function do_ajax_call(data,ajaxurl){ 
....
$.ajax({    url: ajaxurl,
            method: 'POST',
            data: data,
            dataType:'json',            
            success: function(result){
    ...
});

  

Комментарии:

1. Вы видели эту ошибку при закрытии кавычек? это происходит постоянно content['mypart1]

2. опс, это ошибка моего сообщения, в коде все правильно, я обновляю сообщение. спасибо за это уведомление

3. Покажите нам свой AJAX-запрос, куда вы на самом деле отправляете и эти данные.

4. опубликуйте свой ajax-код вместе с php

5. я добавил часть ajax-вызова

Ответ №1:

HTML:

 <div class="progress-bar progress-primary" id="bar" role="progressbar" style="width: 0%"></div>
<b id="import"></b>
  

js:

 var data = {};//js object
data["key1"] = document.getElementById('import').outerHTML;
data["key2"] = document.getElementById('bar').outerHTML;

        $.ajax({
            beforeSend: function () {
            },
            complete: function () {
            },
            type: "POST",
            url: ajaxurl,
            data: data,
            success: function (data) {
                setTimeout(function () {
                }, 1000);
            }
        });
  

php :

 echo'<pre>';print_r($_POST);die;
  

вывод :

 <pre>Array
(
    [key1] => <b id="import"></b>
    [key2] => <div class="progress-bar progress-primary" id="bar" role="progressbar" style="width: 0%"></div>
)

  

Это проверенный код

Комментарии:

1. Привет, если я правильно понимаю, основное различие между вашим и моим кодом заключается в том, что вы не строите «данные» перед их отправкой. Если я попробую то же самое, вызов ajax выглядит немного лучше. несколько / отсутствуют. Но я вижу в консоли текст «object» перед строкой «content: Object { «mypart1″: …» и в моем php-файле я получаю ошибку » json_decode () ожидает, что параметр 1 будет строковым, заданный массив», если я напечатаю $ post — это результат [content] => Array ( [0] => )

2. Я уже упоминал в своем ответе, что я не использую array, это объект в части js, поэтому не нужно выполнять декодирование, просто используйте его как массив $ _POST, т. Е. массив объекта

3. да, в javascript я тоже определяю содержимое как object, поэтому я не вижу разницы?

4. выполнить echo var_dump($_POST); умереть;

5. хорошо, var_dump возвращает array(1) { [0]=> string(719) «….} внутри [0] есть все содержимое, но мне нужно, чтобы оно было отдельным для каждого ключа!? Что-то идет не так, и я не могу понять, что