尝试通过AJAX提交时,%5Bobject%20Object%5D(404 not found)

我试图通过ajax将变量传递给将运行MySQL查询的PHP脚本。 但是,我不断收到错误404 Not Found with:“http:// myurl / database /%5Bobject%20Object%5D”。

看起来它正在尝试将数据发送到http:// myurl / database /%5Bobject%20Object%5D而不是我定义的PHP脚本。 真的对这一点感到茫然…我认为把绝对URL放进去会有用。

以下是我的代码。 永远感激任何帮助….

 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; };  

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

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

另一个问题是你使用& 分开参数; 这应该只在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作为参数名称。

您应该将$.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); 

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

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

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

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

这似乎是一个jquery bug。 jQuery.postjQuery.ajax({method:"post"});的简写jQuery.ajax({method:"post"}); ,所以我把我的代码改成了这个,它对我有用。 希望他们能纠正这个问题。

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