Ответ 1
Вместо:
data: "id=" + thisId + "&value=" + thisValue
do:
data: { id: thisId, value: thisValue }
Таким образом, jquery позаботится о правильном URL-кодировании значений. Строковые конкатенации являются корнем всего зла: -)
Я выполняю асинхронные запросы HTTP (Ajax) через jQuery с базовым $.ajax(). Код выглядит следующим образом:
$("textarea").blur(function(){
var thisId = $(this).attr("id");
var thisValue = $(this).val();
$.ajax({
type: "POST",
url: "some.php",
data: "id=" + thisId + "&value=" + thisValue,
success: function(){
alert( "Saved successfully!" );
}
});
});
Все работает нормально, как обычно, пока пользователь не наберет внутри textarea ampersand (&) символ.. Когда я отлаживаю функцию PHP, которая сохраняет значение, она всегда имеет значение до этого символа.
Я считаю, что должно быть решение пропустить амперсанд (&) каким-то образом. Любые идеи?
Вместо:
data: "id=" + thisId + "&value=" + thisValue
do:
data: { id: thisId, value: thisValue }
Таким образом, jquery позаботится о правильном URL-кодировании значений. Строковые конкатенации являются корнем всего зла: -)
Настоятельно рекомендуем вам использовать решение, предоставленное Darin выше, если это вообще возможно; Таким образом, вы можете повторно использовать проверенный код для создания данных POST
.
Но если вам действительно действительно нужно использовать конкатенацию строк (здесь или в другом месте вашего приложения при создании строк запроса или данных POST
из пользовательских входов), вам нужно использовать encodeURIComponent
:
$("textarea").blur(function(){
var thisId = $(this).attr("id");
var thisValue = $(this).val();
$.ajax({
type: "POST",
url: "some.php",
data: "id=" + encodeURIComponent(thisId) + "&value=" + encodeURIComponent(thisValue),
success: function(){
alert( "Saved successfully!" );
}
});
});
По умолчанию при отправке POST
с jQuery.ajax
вы отправляете данные с типом контента application/x-www-form-urlencoded
, который означает, что вы обещаете, что данные закодированы таким образом. Вы должны быть уверены, что сохраните свою часть сделки и фактически закодируйте ее. Это не просто важно для амперсандов.
просто используйте функцию javascript encodeURIComponent()
:
$("textarea").blur(function(){
var thisId = $(this).attr("id");
var thisValue = $(this).val();
$.ajax({
type: "POST",
url: "some.php",
data: "id=" + thisId + "&value=" + encodeURIComponent(thisValue),
success: function(){
alert( "Saved successfully!" );
}
});
});
$.ajax({
type:'POST',
dataType: "text",
url:'save.php',
data:'_id='+$('#id').val()+'&title='+$('#title').val(),
??
data: { id: thisId, value: thisValue }