2016-02-25 55 views
1

走過時,我想通過AJAX像這樣的東西送我的PHP變量和輸入文件..未定義指數:PHP變量通過AJAX

$(document).ready(function(){ 
    $("#submit").click(function(){ 

     //var formData = new FormData($('form#data')[0]); 

     var chaID = "<?php echo $chaID; ?>"; 
     var row_number = "<?php echo $row_number; ?>"; 
     var tag = "<?php echo $tag; ?>"; 
     var data = '&chaID=' + chaID + '&row_number=' + row_number + '&tag=' + tag; 

     //Returns successful data submission message when the entered information is stored in database. 
     $.ajax({ 
      type: "POST", 
      url: "ajax_challenge.php", 
      data : data, 
      cache: false, 
      success: function(result){ 

       $('#level').modal('show'); 

      }, 
      contentType: false, 
      processData: false 
     }); 


     return false; 
    }); 
}); 

formData工作正常,從而讓我們的重點var data。當我運行這個函數ajax_challenge.php響應「未定義索引」,但在請求部分它顯示&chaID=7&row_number=2&tag=6所以它應該工作。

也許我做了錯誤的PHP?

$chaID = $_POST['chaID']; 
$row_number = $_POST['row_number']; 
$tag = $_POST['tag']; 

此外,是否有正確混合formData +數據?

編輯。瀏覽器的控制檯

response screenshot

request

EDIT2的截圖---------------------------- -------------------------------

的事情是,它會工作,如果我刪除

  contentType: false, 
      processData: false 

但問題是如果我刪除它也CA通過URL輸入:文件不通過var formData。我想做什麼?

+2

你看過瀏覽器控制檯中的AJAX請求/響應了嗎? –

+0

嗨@JayBlanchard,是的,我看過它的響應不斷顯示未定義的索引,但請求顯示&chaID = 7&row_number = 2&tag = 6所以這並不意味着它已經糾正了值? –

+0

只需要在這個''chaID ='+ chaID +'&row_number ='+ row_number +'&tag ='上改變這個'&chaID ='+ chaID +'&row_number ='+ row_number +'&tag ='+ '+標記;'你沒有有效的發佈數據。 – Naumov

回答

3

我想我明白髮生了什麼,你錯誤地將GET參數傳遞給數據變量。

從我的jQuery的附加GET參數的理解,修復會

'?chaID=' + chaID + '&row_number=' + row_number + '&tag=' + tag 

如果不解決這個問題,嘗試檢查錯誤控制檯或嘗試console.log值。在將它們放入URL之前,請確保您的值爲encodeURI

另外,最好使用GET值創建一個數組,並將它們傳遞給jQuery.ajax()函數的數據變量,因爲它會自動爲您執行字符串轉換,請嘗試使用它,而不是可能只是解決了這個問題。 ;)

你可以找到jQuery的與encodeURI的AJAX功能,這裏的文檔: http://api.jquery.com/jquery.ajax/

http://www.w3schools.com/jsref/jsref_encodeURI.asp

編輯:我注意到你正在使用POST方法,在這種情況下,再通過發佈值數組到數據參數,它應該工作。但是隻包含變量值。示例數組:

data = [chaID, row_number, tag]; 

將數組傳遞給數據參數,並且它應該發佈值就好了。另外,嘗試在你的問題中包含控制檯網絡標籤的屏幕截圖,它告訴我們是否有問題。另外一個控制檯截圖。

EDIT2:好的,這裏是我的觀察:ProcessData將處理該對象,因此它有意義formData將無法正常工作。嘗試附加其他數組:

data = [chaID, row_number, tag]; 
for (var i = 0; i < formData.length; i++) { 
    data.append('formData[]', formData[i]); 
} 

EDIT3:這應該工作。只需要修改你的PHP和JS這樣:

var data = formData; 
    var params = $.param({"chaID": chaID, "row_number": row_number, "tag": tag}); 


//Returns successful data submission message when the entered information is stored in database. 
$.ajax({ 
type: "POST", 
url: "ajax_challenge.php?" + params, 
data : data , 

和PHP:

$chaID = $_GET['chaID']; 
$row_number = $_GET['row_number']; 
$tag = $_GET['tag']; 
+0

好吧我會嘗試使數組,而不是._。我修正了一個語法,但仍然不起作用 –

+0

不需要使用'?',因爲OP使用方法$ _POST – devpro

+0

@devpro OH我沒有注意到他是POSTing而不是GETing,在這種情況下,它必須是一個必須的值數組。 –

1

因爲你把你的PHP變量到腳本。和PHP首先編譯代碼你的JavaScript運行:

var chaID = "<?php echo $chaID; ?>"; 
    var row_number = "<?php echo $row_number; ?>"; 
    var tag = "<?php echo $tag; ?>"; 
    var data = '&chaID=' + chaID + '&row_number=' + row_number + '&tag=' + tag; 

所以,你沒有點擊,$ _ POST [「CHAID」],而不是定義的另一個$ _ POST變量。

+0

這是正確的,除非腳本所在的文件是一個.php文件,在輸出之前首先被解釋。在那種情況下通常是這種情況(注意開放標籤),這種理論是不正確的。 –

1

如果您正在使用$_POST方法阿賈克斯無需啓動PARAM數據與&

var data = '&chaID=' + chaID + '&row_number=' + row_number + '&tag=' + tag; 

替換:

var data = 'chaID=' + chaID + '&row_number=' + row_number + '&tag=' + tag; 

還要檢查在PHP你想說什麼用值print_r($_POST);

+0

我用你的語法取代了它。 print_r也是未定義的。 –

+0

@ nongkarntt-nitchkarnt改變這個'type:「POST」,'進入'method:「POST」,' – devpro