2012-06-06 68 views
6

我已经实现了一个基于点击按钮的ajax post函数。代码是为什么我的POST变量显示在URL字符串上?

$.ajax({ 
    type: "POST", 
    url: "includes/phpscripts?action=manage", 
    data: {location: loc, lat: latitude, lon: longitude, heading: head, filename: file}, 
    success: function(){ 
     $("#panoInfo").html("<div id='message'></div>"); 
     $("#message").html("Valid Submission"); 
    } 
}); 

我指定了POST方法,因为我不希望变量通过URL可见。但是,他们是。发帖之前

我的测试网址是

http://localhost/JMCTour/buildtour.php 

之后

http://localhost/JMCTour/buildtour.php?filename=1-prefix_blended_fused.jpg&location=Start+of+Tour&lat=43.682211&long=-70.450705&heading=100&submit=Save 

为什么?

+2

好像你不处理正确提交按钮,通过GET发送的所有数据。你可以发布提交代码吗? –

+1

您可以使用'$ .post()'替代... –

+0

@JeremyHolovacs他使用'$ .post()',只是它是非快捷方式的版本。参见'type:“POST”' –

回答

3

docs for jQuery.ajax(重点煤矿):

数据

数据要被发送到服务器。它被转换成查询字符串,如果还不是字符串的话。它附加到GET请求的url。 请参阅processData选项以防止此自动处理。对象必须是键/值对。如果value是一个数组,则jQuery会根据传统设置的值(如下所述)使用相同的键序列化多个值。

,因此:

processDataBoolean

默认:true

默认情况下,该数据选项传递作为一个对象(技术数据,任何字符串以外)将被处理并转换成一个查询字符串,以适应默认的内容类型“application/x-www-form-urlencoded”。如果要发送DOMDocument或其他未处理的数据,请将此选项设置为false。

+0

我错过了那部分。感谢您指点我正确的方向! – Jason

4

由于缺乏问题中的信息,我在这里做了很多假设。

比更有可能的是你的形式看起来是这样的:

<form> 
    <input type="text" name="lon" /> 
    <input type="text" name="lat" /> 
    <input type="text" name="heading" /> 
    <input type="file" name="image" /> 

    <input type="button" id="submit" value="Submit" /> 
</form> 

马上我们有一个问题,你的文件输入。无法使用jQuery的ajax方法通过ajax发送文件,而无需包含在后台正确处理它的附加插件,或者将代码编写为隐藏的iframe或其他方法(html5?flash?)。

忽略文件输入,这里是你的原始问题。

$("#submit").click(function(){ 
    $.ajax(...); 
}); 

我遗漏了ajax选项,因为它们是不相关的。问题是,由于表单中的按钮是表单中的最后一个输入,并且没有提交按钮,因此它将像提交按钮一样提交表单,除非您阻止该默认操作。如果您不阻止该默认操作,则表单将以默认类型“GET”提交,因为您未在表单中设置类型。

为了防止click事件的默认操作,要么返回false,或使用event.preventDefault()

$("#submit").click(function(event){ 
    event.preventDefault(); 
    $.ajax(...); 
}); 

修复文件输入的问题可能已经在其他几个SO问题的解答。

+0

你几乎是正确的,除非我没有通过查询发送文件,只是相对位置。我知道它在数据库设计方面存在着一场神圣的战争,即关于将文件本身或链接存储到数据库中。在这个例子中,我要选择2。 – Jason

7

确保您的形式标记有method='POST'

<form method='POST'> 
... 
</form> 
相关问题