2012-11-08 60 views
1

我有這樣的阿賈克斯/ jQuery代碼:如何獲取由AJAX提交的變量正確使用PHP?

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> 

,你可以看到過程001.php是處理所有的文件HTML格式的變量。但我必須提交該表格,「抓」 $Headline$SubHeadline困難,這實際上「操縱」阿賈克斯太...

我嘗試使用的過程001.php驗證碼:

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

但似乎這些變量是空的......如何正確地獲取由AJAX提交的變量?

回答

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; 

否則,您可以獲得索引unde罰款通知。

而且,由於你沒有使用任何的選項$.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(); 
    } 
}); 
2

$_POST變量區分大小寫 - 你的ajax端的變量是小寫的,PHP端是大寫的。

+0

感謝兄弟,我沒有再知道我在這裏做了一些錯字...謝謝! –

+0

歡迎,歡迎,雖然@Corbin有我10秒...和一系列與越來越有用的信息編輯;) – Ben

2

嘗試數據流像

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

爲fatching在PHP中,你需要使用

$標題= $ _ POST [ '標題'];

$ SubHeadline = $ _POST ['subheadline'];

它會正常工作

+3

...這仍然不會工作,因爲他請求'$ _POST ['標題']'。 – Ben

1

您確定曾經請求過程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>