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でファッティングするには、使用する必要があります

$Headline = $_POST['見出し'];

$SubHeadline = $_POST['subheadline'];

そしてそれはうまくいくでしょう

于 2012-11-08T05:15:17.770 に答える
2

headlineHeadlineは同じキーではありません。キーは完全に一致する必要があります

また、文字列を手作業で作成するのは非常に難しいため、オブジェクトリテラルまたは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 が要求されたことはありますか? 可能性の 1 つは、送信ボタンをクリックしたときに、空のアクションでラッピング フォームが送信されたことです。

より安全な方法は

<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 に答える