jQuery / Ajax PHP POST调用

时间:2010-12-07 21:27:13

标签: php jquery ajax

我发布的表单包含以下内容:

if ( flag ) {
jQuery.ajax({
    url: 'submit_licence.php',
    dataType: 'json',
    type: 'POST',
    data: 'flag=' + flag + '&region=' + 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" />

和我的PHP:

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

}

但是当它发布时,它没有检索任何发布的数据(发布的值是空白的)

为什么不提取数据?我错过了什么?我做错了什么?

不幸的是,我不能发布整个脚本/页面,因为它是一个客户的私人项目,虽然我认为我已经为我想要做的事情提供了足够的信息。

7 个答案:

答案 0 :(得分:2)

当json响应格式错误时,jQuery ajax调用会无声地失败。

确保将此格式用于json:

{"firstName": "John", "lastName": "Smith", "age": 25}

不要使用单引号。

PHP json_encode()正确完成。

要进一步调试错误,请使用complete(XMLHttpRequest, textStatus)回调。

第二个参数是错误类型。 (见jQuery.ajax

答案 1 :(得分:1)

在SO

上阅读

你需要等待函数的返回:

onSubmit="return sendData()"

否则表格将立即提交,并且不会等到数据发生变化。

在函数内部替换此

document.data.submit();

用这个:

return true;

上面评论中发布的链接

答案 2 :(得分:1)

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>

检查数据是否已发送,“print_r($ _ POST);”,这应该可行

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

答案 3 :(得分:1)

使用Firebug for Firefox检查使用Ajax且没有Ajax的HTTP标头(只需设置<form method="post"...>并添加<input type="submit">)。

答案 4 :(得分:0)

相对较新的jQuery Ajax,我不确定,但这可能是一个原因吗?

  

data(Object,String):   要发送到服务器的数据。它是   转换为查询字符串,如果没有   已经是一个字符串它被附加到了   GET请求的网址。

也许因为这不是GET,数据会“掉下来”?

答案 5 :(得分:0)

您尚未提供有关此问题的足够信息。你如何触发ajax请求?如果它发生在submit() - 处理程序中,则需要使用event.preventDefault()来阻止默认行为,否则请求将被默认浏览器行为中止。你确定你真的进入了声明吗?这可以使用Firebug进行检查,以查看是否有请求,就像许多其他人建议的那样。

所以,试试这些简单的事情:

  • 在事件处理程序中,使用event.preventDefault来防止默认浏览器行为
  • 使用Firebug查看是否正在向服务器发出请求,并检查请求中的POST数据(如果已发送)

看到你没有真正提供关于你如何以及在何处调用此代码的足够信息,我只能猜测问题是什么。

希望这有用:)

答案 6 :(得分:0)

Hvae你确认你在AJAX中传递的值有值吗?尝试一个简单的警报和var来查看其中的内容。

如果警报显示值,则将数据类型更改为文本,并查看它是否传递数据。不要将其用于最终解决方案,只需调试