Подтвердить что ты не робот

% 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+"&amp;industry="+ industry +"&amp;geolocation="+ geolocation,
        });
return false;
};

</script>
4b9b3361

Ответ 1

Как сказал andi, $. post ожидает строку URL в качестве первого параметра; если вы хотите передать объект опции, вы должны использовать $. ajax.

При попытке вызвать $.post(<option object>) объект option используется как URL-адрес; в этом процессе он преобразуется в строку (и объект, переданный в строку, становится [object <type>] в Javascript, в этом случае [object Object]) он получает URL-кодировку (%5Bobject%20Object%5D), и, поскольку он не начинаться с / или имени протокола, он интерпретируется как относительный URL и получает префикс текущего протокола, домена и пути. Тогда, поскольку параметров больше нет, на этот URL отправляется пустой запрос POST AJAX.

Другая проблема заключается в том, что вы используете &amp; для разделения параметров; это должно быть сделано только в 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+"&amp;industry="+ industry +"&amp;geolocation="+ geolocation
});

или, с $.post

$.post("http://myURL/database/InsertData.php", "dataid="+ dataid+"&amp;industry="+ industry +"&amp;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.