1

我有这个 ajax/jquery 代码:

var headline = $("input#headline").val();
var subheadline = $("textarea#subheadline").val();
var pics = $("input#pics").val();   
var dataString = 'headline='+ headline + '&subheadline=' + subheadline + '&pics=' + pics;

$(".save-notice").hide();
$.ajax({  
type: "POST",  
url: "web-block/forms/process-001.php",
data: dataString,
success: function() {             
$(".save-notice").show();
$(this).parents(".manage-content-wrap").next(".ribbon-content").fadeIn();
}  
});  

另一方面,我有这个 HTML 表单:

<form action="" id="select-block" class="general-form">
<div class="input-wrap">
    <input class="clearme" name="Headline" value="<?php echo $Headline;?>" id="headline"/>
</div>
<div class="input-wrap">
    <textarea class="clearme" name="Sub-Headline" id="subheadline"><?php echo $SubHeadline;?></textarea>
</div>
<label>Bottom Left Image</label>
<div class="up-mask">
    <span class="file-wrapper">
      <input type="file" name="Pics" class="photo" id="pics" />
      <span class="button">
         <span class="default-txt">Upload Photo</span>
      </span>
    </span>
</div><!-- .up-mask -->

<input type="hidden" name="Key" value="<?php echo $Key;?>"/>
<input type="submit" class="submit-btn" value="SAVE" />
<span class="save-notice">Your changed has been saved!</span>
</form>

如您所见, process-001.php 是处理来自 HTML 表单的所有变量的文件。但我很难“捕捉”$Headline$SubHeadline通过该表单提交,实际上它也被 Ajax “操纵”......

我尝试在 process-001.php 上使用此代码:

$Headline = $_POST['Headline'];
$SubHeadline = $_POST['Sub-Headline'];

但似乎那些变量是空的......如何正确获取AJAX提交的变量?

4

4 回答 4

3

尝试数据流

var dataString = {
                   headline: headline,
                   subheadline: subheadline,
                   pics:pics
                };

对于在 php 中进行填充,您需要使用

$标题 = $_POST['标题'];

$SubHeadline = $_POST['subheadline'];

它会正常工作

于 2012-11-08T05:15:17.770 回答
2

headline并且Headline不是同一个键。您的密钥需要完全匹配。

此外,由于手动构建字符串很快就会变得非常棘手,您可能需要考虑使用对象文字或serialize()

data: {
    'foo': 'bar',
    'baz': [1, 2, 3]
}

会有$_POST['foo'] === 'bar'$_POST['baz'] === array(1, 2, 3)

您也不应该假设存在任何类型的输入:

$headline = (isset($_POST['headline'])) ? $_POST['headline'] : null;

否则,您可以获得索引未定义通知。

此外,由于您没有使用任何$.post未公开的选项,您可以只使用$.post简写:

$.post("web-block/forms/process-001.php", {
    data: $("#select-block").serialize(),
    function() {             
        $(".save-notice").show();
        $(this).parents(".manage-content-wrap").next(".ribbon-content").fadeIn();
    }  
});

或者:

$.post("web-block/forms/process-001.php", {
    data: {
        Headline: $("#headline").val(), //input#headline is redundant -- getting a node by ID is extremely efficent; getting by tag is not
        'Sub-Headline': $("#subheadline").val()
    },
    function() {             
        $(".save-notice").show();
        $(this).parents(".manage-content-wrap").next(".ribbon-content").fadeIn();
    }  
});
于 2012-11-08T05:12:59.270 回答
2

$_POST变量区分大小写 - ajax 端的变量是小写的,PHP 端是大写的。

于 2012-11-08T05:13:45.783 回答
1

您确定曾经请求过 process-001.php 吗?因为,其中一种可能性是,当您单击提交按钮时,包装表单已以空操作提交。

更安全的方法是

<input type="submit" class="submit-btn" value="SAVE" onclick="return false;" />

<script type="text/javascript">
$('form#select-block input:submit').click(function() {
  // ajax goes here
});
</script>
于 2012-11-08T05:17:31.553 回答