【问题标题】:jQuery/Ajax PHP POST calljQuery/Ajax PHP POST 调用
【发布时间】:2010-12-07 21:27:13
【问题描述】:

我正在发布一个包含以下内容的表单:

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

}

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

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

很遗憾,我无法发布整个脚本/页面,因为它是客户的私人项目,尽管我认为我已经为我正在尝试做的事情提供了足够的信息。

【问题讨论】:

  • 您没有提供任何信息。问题的根源似乎在于您实际输出数据的位置,而您没有显示那部分代码。
  • 使用 Firebug/Chrome 开发工具检查您的发布请求
  • 你怎么看出来的?脚本其他部分中输入字段的调用工作正常,我只有这个特定部分有问题,因此我只发布了这么多信息。
  • 不确定这是否有帮助:stackoverflow.com/questions/4076686/…
  • 在 Firebug 中弹出的唯一内容是:不应使用 keydown 事件的 'charCode' 属性。该值没有意义。

标签: php jquery ajax


【解决方案1】:

当 json 响应格式错误时,jQuery ajax 调用会静默失败。

请确保您对 json 使用这种格式:

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

不要使用单引号。

PHP 的 json_encode() 正确。

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

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

【讨论】:

    【解决方案2】:

    在 SO 上阅读此内容

    需要等待函数返回:

    onSubmit="return sendData()"
    

    否则表单将立即提交,并且不会等到数据更改。

    在函数里面替换这个

    document.data.submit();
    

    用这个:

    return true;
    

    链接发布在上面的评论中

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        对 Firefox 使用 Firebug 来检查使用 Ajax 和不使用 Ajax 的 HTTP 标头(只需设置 &lt;form method="post"...&gt; 并添加 &lt;input type="submit"&gt;)。

        【讨论】:

        • 我已经这样做了,它返回:Parametersapplication/x-www-form-urlencoded flag 2 fname First lname Last lnum 1 region VIC Source flag=2&region=VIC&lnum=1&fname=First&lname=Last
        • 您使用 Jquery 发送的内容是否相同?
        【解决方案5】:

        对 jQuery Ajax 比较陌生,我不确定,但这可能是原因吗?

        数据(对象,字符串): 要发送到服务器的数据。这是 转换为查询字符串,如果不是 已经是一个字符串。它附加到 GET 请求的 url。

        也许因为这不是 GET,所以数据正在“下降”?

        【讨论】:

        • 不,他正确地使用了数据。文档的意思是,对于所有其他请求类型,它都作为正文发送,除了 GET 附加到 URL。
        • 它应该可以工作,因为类型是 POST,我已经尝试过,但没有任何区别。
        • @Matti - 感谢您的解释/澄清!
        【解决方案6】:

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

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

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

        鉴于您并未真正提供有关如何以及在何处调用此代码的足够信息,因此我只能猜测问题所在。

        希望这会有所帮助:)

        【讨论】:

          【解决方案7】:

          您确认您在 AJAX 中传递的值有值吗?尝试一个简单的 alert 和 var 看看里面有什么。

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-04-26
            • 2014-03-17
            • 2019-01-22
            • 2011-06-27
            相关资源
            最近更新 更多