% 5Bobject %20Object% 5D (404 не найден) при попытке отправить через AJAX
Я пытаюсь передать переменные через ajax в PHP script, который будет запускать запрос MySQL. Тем не менее, я продолжаю получать ошибку 404 Not Found с: "http://myurl/database/% 5Bobject %20Object% 5D".
Похоже, он пытается отправить данные http://myurl/database/%5Bobject%20Object%5D вместо установленного мной PHP скрипт. Действительно в убытке по этому... Я думал, что установка абсолютного URL-адреса будет работать.
Ниже мой код. Был бы вечно благодарен за любую помощь....
<script type="text/javascript">
function insertData()
{
var dataid= $('#dataid').attr('value');
var industry = $('#industry').attr('value');
var geolocation = $('#geolocation').attr('value');
$.post({
type: "POST",
url: "http://myURL/database/InsertData.php",
data: "dataid="+ dataid+"&industry="+ industry +"&geolocation="+ geolocation,
});
return false;
};
</script>
Ответы
Ответ 1
Как сказал andi, $. post ожидает строку URL в качестве первого параметра; если вы хотите передать объект опции, вы должны использовать $. ajax.
При попытке вызвать $.post(<option object>)
объект option используется как URL-адрес; в этом процессе он преобразуется в строку (и объект, переданный в строку, становится [object <type>]
в Javascript, в этом случае [object Object]
) он получает URL-кодировку (%5Bobject%20Object%5D
), и, поскольку он не начинаться с /
или имени протокола, он интерпретируется как относительный URL и получает префикс текущего протокола, домена и пути. Тогда, поскольку параметров больше нет, на этот URL отправляется пустой запрос POST AJAX.
Другая проблема заключается в том, что вы используете &
для разделения параметров; это должно быть сделано только в HTML, здесь вы должны просто использовать &
. (Или объект данных, как сказал Эван, так вам не нужно думать о проблемах с кодировкой.) И .val()
и .attr('value')
не совпадают; первое - текущее значение поля, второе - любое значение, которое оно имело при загрузке страницы.
Простейшим способом для этого является следующее:
function insertData() {
var data = $('#dataid,#industry,#geolocation').serialize();
$.post('http://myURL/database/InsertData.php', data);
return false;
}
Это предполагает, что три поля имеют одинаковые name
и id
как $. serialize использует name
для имени параметра.
Ответ 2
Вы должны изменить $.post
на $.ajax
или передать URL и данные в качестве параметров.
$. post - это всего лишь сокращение от $. ajax, и он принимает URL-адрес в качестве первого параметра.
Итак, это должно быть:
$.ajax({
type: "POST",
url: "http://myURL/database/InsertData.php",
data: "dataid="+ dataid+"&industry="+ industry +"&geolocation="+ geolocation
});
или, с $.post
$.post("http://myURL/database/InsertData.php", "dataid="+ dataid+"&industry="+ industry +"&geolocation="+ geolocation);
Помните, что документы почти всегда полезны
Ответ 3
попробуйте отправить ваши данные в объект, например:
data: {
dataid : dataid,
industry : industry,
geolocation : geolocation
}
Ответ 4
Эван прав, попробуйте отправить ваши данные объектом, jquery позаботится о правильном URL-кодировании значений. Конкатенации строк могут быть проблематичными в js.
Ответ 5
Кажется, это ошибка jquery. jQuery.post
является сокращением jQuery.ajax({method:"post"});
, поэтому я изменил свой код на это, и это сработало для меня. Надеюсь, они исправит эту проблему.
Заметьте, проблема все еще существует в версиях 1.10.2 и 2.0.2.