#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] есть все содержимое, но мне нужно, чтобы оно было отдельным для каждого ключа!? Что-то идет не так, и я не могу понять, что