jQuery/Ajax PHP POST调用
我正在发布一份包含以下内容的表格:jQuery/Ajax PHP POST调用,php,jquery,ajax,Php,Jquery,Ajax,我正在发布一份包含以下内容的表格: if ( flag ) { jQuery.ajax({ url: 'submit_licence.php', dataType: 'json', type: 'POST', data: 'flag=' + flag + '®ion=' + jQuery('#licenceRegion').val() + '&lnum=' + jQuery('#enterLicence').val() + '&fna
if ( flag ) {
jQuery.ajax({
url: 'submit_licence.php',
dataType: 'json',
type: 'POST',
data: 'flag=' + flag + '®ion=' + jQuery('#licenceRegion').val() + '&lnum=' + jQuery('#enterLicence').val() + '&fname=' + jQuery('#fname').val() + '&lname=' + jQuery('#lname').val(),
success: function( data ) {
}
});
}
HTML
<input class="buttondb4 white2 large" type="text" value=" " id="enterLicence" />
<input type="hidden" name="licenceRegion" id="licenceRegion" value="" />
<input type="hidden" name="fname" id="fname" value="First" />
<input type="hidden" name="lname" id="lname" value="Last" />
但是当它被发布时,它不会检索任何发布的数据(发布的值为空)
为什么它不提取数据?我错过了什么?我做错了什么
不幸的是,我无法发布整个脚本/页面,因为它是客户的私人项目,尽管我认为我已经提供了足够的信息来完成我的工作。对于jQuery Ajax来说,我不确定,但这可能是一个原因吗 数据(对象、字符串): 要发送到服务器的数据。它是 已转换为查询字符串(如果不是) 已经是一串了。它被附加到 获取请求的url
也许因为这不是一个GET,所以数据正在“脱落”?当json响应格式错误时,jQuery ajax调用会无声地失败 确保对json使用以下格式:
{"firstName": "John", "lastName": "Smith", "age": 25}
不要使用单引号
PHP的操作是正确的
要进一步调试错误,请使用complete(XMLHttpRequest,textStatus)
回调
第二个参数是错误类型。(请参阅)请仔细阅读
您需要等待函数返回:
onSubmit="return sendData()"
否则表格将立即提交,而不会等到数据更改后才提交
在函数内部替换此
document.data.submit();
为此:
return true;
上面评论中发布的链接HTML
<script type="text/javascript">
$(document).ready(function(){
...
if ( flag ) {
$.ajax({
url: 'submit_licence.php',
dataType: 'json',
type: 'POST',
data: 'flag=' + flag + '&' + $('#someId').serialize(),
success: function( data ) {
}
});
}
});
</script>
...
<form id='someId'>
...
<input class="buttondb4 white2 large" type="text" value=" " id="enterLicence" />
<input type="hidden" name="licenceRegion" id="licenceRegion" value="" />
<input type="hidden" name="fname" id="fname" value="First" />
<input type="hidden" name="lname" id="lname" value="Last" />
</form>
使用Firefox检查使用Ajax和不使用Ajax的HTTP头(只需设置
并添加
)。您还没有提供足够的有关此问题的信息。如何触发ajax请求?如果它发生在submit()-处理程序中,则需要使用event.preventDefault()阻止默认行为,否则请求将被默认浏览器行为中止。你确定你真的进入了这个声明吗?这可以使用Firebug进行检查,以查看是否像许多其他人建议的那样提出了请求
那么,试试这些简单的事情:
- 在事件处理程序中,用于防止默认浏览器行为
- 使用Firebug查看是否向服务器发出了请求,并检查请求中的POST数据(如果已发送)
希望这是有帮助的:)Hvae您确认在AJAX中传递的值有值吗?尝试一个简单的警报和var来查看其中的内容
如果警报显示值,则将数据类型更改为文本,并查看它是否传递数据。不要将此用于最终解决方案,只需调试您尚未提供任何信息。问题的根源似乎是您实际输出数据的位置,而您没有显示代码的这一部分。请使用Firebug/Chrome dev toolsHow检查您的post请求,您认为如何?在脚本的其他部分调用输入字段很好,我只是在这个特定部分遇到问题,因此我只发布了这么多信息。不确定这是否会有帮助:Firebug中弹出的唯一一件事是:不应该使用keydown事件的“charCode”属性。这个值没有意义。不,他使用的数据是正确的。文档的意思是,对于所有其他请求类型,它都作为正文发送,除了GET,它被附加到URL。它应该可以作为POST类型工作,我已经尝试过任何一种方法,但没有任何区别。@Matti-感谢您的解释/澄清!我已经这样做了,它返回:Parametersapplication/x-www-form-urlencoded flag 2 fname First lname Last lnum 1 region VIC Source flag=2®ion=VIC&lnum=1&fname=First&lname=Last,这与使用Jquery发送的内容相同吗?
<script type="text/javascript">
$(document).ready(function(){
...
if ( flag ) {
$.ajax({
url: 'submit_licence.php',
dataType: 'json',
type: 'POST',
data: 'flag=' + flag + '&' + $('#someId').serialize(),
success: function( data ) {
}
});
}
});
</script>
...
<form id='someId'>
...
<input class="buttondb4 white2 large" type="text" value=" " id="enterLicence" />
<input type="hidden" name="licenceRegion" id="licenceRegion" value="" />
<input type="hidden" name="fname" id="fname" value="First" />
<input type="hidden" name="lname" id="lname" value="Last" />
</form>
//print_r($_POST);
if ($_POST){
$lnum = noescape($_POST['lnum']);
$fname = noescape($_POST['fname']);
$lname = noescape($_POST['lname']);
$region = noescape($_POST['region']);
$flag = noescape($_POST['flag']);
//mysql query here
...
echo json_encode($result);
}