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

时间:2012-04-27 20:30:42

标签: jquery ajax 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>

5 个答案:

答案 0 :(得分:19)

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

当您尝试呼叫$.post(<option object>)时,选项对象将用作URL;在该过程中,它被强制转换为字符串(并且在Javascript中强制转换为字符串的对象变为[object <type>];在本例中为[object Object]),它将获得URL编码(%5Bobject%20Object%5D) ,并且,由于它不以/或协议名称开头,因此它被解释为相对URL并以当前协议,域和路径为前缀。然后,由于没有更多参数,因此会向该URL发送一个空的POST AJAX请求。

另一个问题是您使用&amp;来分隔参数;这应该只在HTML中完成,在这里你应该只使用&。 (或者像Evan所说的那样,数据对象,你不需要考虑编码问题。).val().attr('value')不一样;第一个是字段的当前值,第二个是页面加载时的值。

最正确的方法是:

function insertData() {
    var data = $('#dataid,#industry,#geolocation').serialize();
    $.post('http://myURL/database/InsertData.php', data);
    return false;
}

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

答案 1 :(得分:9)

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

所以它应该是:

$.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);

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

答案 2 :(得分:1)

尝试在对象中发送数据,例如:

data: {
    dataid : dataid,
    industry : industry,
    geolocation : geolocation
}

答案 3 :(得分:1)

Evan是对的,尝试将数据发送给对象,jquery将负责对值进行正确的URL编码。字符串连接在js中可能有问题。

答案 4 :(得分:1)

这似乎是一个jquery错误。 jQuery.postjQuery.ajax({method:"post"});的简写,因此我将代码更改为此代码,这对我有用。希望他们能纠正这个问题。

请注意,问题仍然存在于1.10.2和2.0.2版本中。