2011-03-27 2 views
0

Это может показаться странным, но у меня проблема с JQ/AJAX/PHP.JQuery ajax php post problem

Мой «код» там и работает в большинстве ситуаций, кроме 1 - когда я пытаюсь передать тег в процессе.

я захватить HTML, как этот

var ed = $('#fraRTE').contents().find('body #editarea').html(); 

#fraRTE является IFrame ширина редактируемой DIV #editarea следовательно .contents().find('body #editarea').html()

Так что если var ed просто «привет мир и т.д ....» нет никаких проблем и данные обрабатываются НО, если var ed что-то вроде «привет мир и т. д.» <img src="image.png"> «данные не обрабатываются - странно, если var ed« привет мир и т. д. <img src="image.png"> »- нет разрыва между текстом и изображением данные фактически обрабатываются.

Если я alert(ed) до поста, то я вижу «правильную» строку - независимо от того, что этого содержания, пост так:

var data = 'content='+ed; 
$.ajax({ 
type: 'post', 
url: 'script.php', 
data: data, 
success: function(msg) { 
alert(msg); 
} 

});

Я создаю строку данных перед «данными: данные», так как в строке есть несколько элементов.

мой alert(msg) устанавливается echo $_POST['content']; на script.php

предупреждение (MSG) говорит мне, что есть (или не) была размещена в БД. здесь я вижу проблему, упомянутую выше. то есть включение (или нет) <img...>

предложения, пожалуйста,

+0

'var data = 'content =' + ed;' - лучше использовать 'var data = {content: ed};' – ThiefMaster

+0

@ThiefMaster - извините, но почему? - Я все еще новичок в JQ, это все –

+1

Это гарантирует, что вам не нужно заботиться о специальных символах, таких как '&' в ваших данных. jQuery будет сериализовать массив в правильно закодированную строку для вас. – ThiefMaster

ответ

0

jQuery достаточно умен, чтобы обрабатывать ваши данные запроса в строку запроса для вас.

$.ajax({ 
    type: 'post', 
    url: 'script.php', 
    data: { content: ed }, 
    success: function(msg) { 
    alert(msg); 
    } 
}); 

Эта проблема, с которой вы сталкиваетесь, - это данные, которые не были надлежащим образом экранированы.

Чтобы stringify это самостоятельно, вы должны использовать encodeURIComponent()

"content=" + encodeURIComponent(ed); 

Но это гораздо проще просто позволить JQuery сделать это для вас.

+0

{content: ed} - не работал для меня, но «content =» + encodeURIComponent (ed); идеально. –

+0

Он должен работать. Посмотрите на фактический запрос, поражающий вашу страницу PHP, и посмотрите, что находится в строке запроса. Предполагая, что 'ed' - это просто строка, тогда' {content: ed} 'будет работать, я обещаю. Кодирование этого было бы «неправильным». –

0

Не используйте строковые конкатенации при построении параметров запроса или они не будут правильно кодировку URL и, если параметр содержит специальные символы не будет быть надлежащим образом полученным. Вот правильный способ:

var data = { content: ed }; 
$.ajax({ 
    type: 'post', 
    url: 'script.php', 
    data: data, 
    success: function(msg) { 
     alert(msg); 
    } 
});