【问题标题】:Serialized AJAX $_POST is not empty but single $_REQUEST is empty序列化 AJAX $_POST 不为空,但单个 $_REQUEST 为空
【发布时间】:2014-01-24 13:16:36
【问题描述】:

我正在像这样进行 AJAX 调用:

$( "#submit_jobs_preview" ).click(function(e) {
    var postData = $('#new_job_form').serialize();
    var formURL = "ajax.xxx.php";

    $.ajax({
    type: 'POST',
    url: formURL,
    data: {submit_jobs_preview: postData },
    success: function(data){
        alert(data);
        }   
    });     
    e.preventDefault(); //STOP default actio
});

在 php 中我回显:

echo $_POST['submit_jobs_preview'];

这个 $_POST 显示了我在表单中正确输入的所有值,如下所示:

new_job_city=Berlin&new_job_name=Manager etc.

但如果我想从这个 $_POST 中获得一个 $_REQUEST,如下所示:

 if($_POST['submit_jobs_preview']){
    echo $city = mysql_real_escape_string($_REQUEST['new_job_city']);
 }

警报为空。

这是为什么呢? :)

提前致谢!

更新

全部返回数据:

XHR Loaded (autocomplete.php - 200 OK - 105.99994659423828ms - 354B) VM2106:3
new_job_city=Halle&new_job_job=Flugbegleiter&new_job_other_job=&job_zielgruppe=Auszubildende&new_job_phone=4921663965439&new_job_email=kleefeld%40dsc-medien.de&new_job_detailhead=F%C3%BCr+unser+zentrales+Marketing+mit+Sitz+in+der+Hauptverwaltung+in+der+City+von+D%C3%BCsseldorf+suchen+wir+zum+n%C3%A4chstm%C3%B6glichen+Termin+eine%2Fn&new_job_time=Vollzeit&teilzeit_std=&new_job_tasks=&new_job_profile=&new_job_advantage=&new_job_creatorId=1&new_job_creationDate=1390569795&new_job_scope=Airport+Service&new_job_niederlassung=7&new_job_active=0 

【问题讨论】:

  • 你会发布所有ajax请求的post参数吗?或在此处粘贴 print_r($_POST)
  • 我认为您不能通过这种方式访问​​。
  • 好吧。你为什么不使用 $_POST['new_job_city'];而不是 $_REQUEST?
  • serialize 创建一个 string 值,通过在发送时将其放入对象中,您也只能在服务器端获得一个字符串值。将serialize 的结果直接作为data 传递给您的AJAX 调用,然后您将获得根据表单字段命名的各个POST 参数。
  • @CBroe 怎么做?有链接吗?

标签: php jquery ajax post


【解决方案1】:

如果没有必要,您不需要使用{submit_jobs_preview: postData }。我会给你另一个提示。使用以下ajax;

$( "#submit_jobs_preview" ).click(function(e) {
    var postData = $('#new_job_form').serialize();
    var formURL = "ajax.xxx.php";

    $.ajax({
    type: 'POST',
    url: formURL,
    data: postData,
    success: function(data){
        alert(data);
        }   
    });     
    e.preventDefault(); //STOP default actio
});

在 php 方面;

if($_POST['new_job_city']){
    echo $city = mysql_real_escape_string($_REQUEST['new_job_city']);
}

在这种情况下,您可以直接使用字段名称。

另一个提示:

您可以在表单上放置一个隐藏值,例如,

<input type="hidden" name="submit_jobs_preview" value="true"/>

在我的回答中,js端将与上面相同,在php端你可以检查;

if($_POST['submit_jobs_preview']){
    echo $city = mysql_real_escape_string($_REQUEST['new_job_city']);
}

如您所见,您可以将帖子值作为隐藏字段发送并进行检查

【讨论】:

  • 谢谢!是的,这行得通。但我发布了一个具有多个值的表单。是否可以像我在帖子中那样使用一个 if 子句来做到这一点?还是我必须为每个值创建一个 if 子句?
  • 不,我输入if($_POST['new_job_city']) 是为了确定提交的表格。您将获得 php 端的所有表单值。我将添加另一个提示,请检查
【解决方案2】:

$_POST['submit_jobs_preview'] 只包含一个字符串,因此您无法以这种方式访问​​它。使用 parse_str() 反序列化 $_POST['submit_jobs_preview']。这样您就可以访问其属性。

$_POST['submit_jobs_preview']['new_job_city']

【讨论】:

  • 这样我得到“n”作为结果。 cO
猜你喜欢
  • 1970-01-01
  • 2015-07-29
  • 2010-12-11
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 2011-11-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多