尝试通过AJAX提交时,%5Bobject%20Object%5D(404未找到)

Ben*_*son 17 ajax jquery post

我试图通过ajax将变量传递给运行MySQL查询的PHP脚本.但是,我一直收到错误404 Not Found with:"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>
Run Code Online (Sandbox Code Playgroud)

Tgr*_*Tgr 19

正如andi所说,$ .post期望一个URL字符串作为第一个参数; 如果要传递选项对象,则必须使用$ .ajax.

当您尝试调用时$.post(<option object>),选项对象用作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;
}
Run Code Online (Sandbox Code Playgroud)

这是假设这三个字段具有相同的nameid$ .serialize使用name参数名称.


and*_*ndi 9

您应该更改$.post$.ajax或将URL和数据作为参数传递. $ .post只是$ .ajax的简写,它将URL作为第一个参数.

所以它应该是:

$.ajax({
    type: "POST",
    url: "http://myURL/database/InsertData.php",
    data: "dataid="+ dataid+"&amp;industry="+ industry +"&amp;geolocation="+ geolocation
});
Run Code Online (Sandbox Code Playgroud)

或者,使用$ .post

$.post("http://myURL/database/InsertData.php", "dataid="+ dataid+"&amp;industry="+ industry +"&amp;geolocation="+ geolocation);
Run Code Online (Sandbox Code Playgroud)

请记住,文档几乎总是有用的