2013-11-22 39 views
3

我想發送一個ajax POST到一個php文件,但是php文件發送了一個「未定義索引」的通知,並且php文件似乎永遠不會收到我想要發送的值。我一直在尋找答案,爲什麼這不能正常工作,所以希望有人能給我一些見解。未定義的索引:ajax POST和/或php腳本中的錯誤?

我的javascript函數從html接收一個值,並接收正確的值。 (這是 「1」,在這種情況下)

function deleteMediaFromDatabase(val) 
    { 

    $.ajax({ url: 'deleteMediaFromDatabase.php', 
     data: {vals : val}, 
     type: 'post', 
     success: function(output) { 
         alert(output); 
        }, 
      error: function(request, status, error){ 
      alert("Error: Could not delete"); 
      } 
    }); 
} 

這裏是我的PHP文件的一部分應接收帖子:

<?php 

ini_set("display_errors", "On"); 
error_reporting(E_ALL); 

    $val = $_POST["vals"]; 

    // create connection 
    $con = mysqli_connect(<stuff you don't care about>); 

    error_log($val . ' is the value', 3, "./error.log"); 

?> 

我,但是正從PHP此錯誤消息:

Notice: Undefined index: vals in /xxx/xxx/htdocs/AdminPanel/deleteMediaFromDatabase.php on line 9

而且我的JavaScript總是輸出錯誤警報:「錯誤:無法刪除」

我知道這個問題1 on已被詢問並回答了很多次,但是除非我跳過一些小的東西,否則我的代碼對我來說看起來是正確的。 (但並不總是...)

+0

你有沒有使用任何開發工具,以確保AJAX調用發佈正確的數據? – Machavity

+0

是的,我已在谷歌瀏覽器(網絡部分)上使用了檢查元素功能,該功能已確認正在發送的是正確的數據,但狀態列爲(已取消)。 這是你可能提到的嗎? – ssrobbi

+0

當我放入斷點並遍歷我的代碼時,它完美地工作。但是,當我拿出斷點並運行它時,就會出錯。這實際上是在表單內執行的。當提交按鈕被按下時,表單正在提交,這將更改數據庫。難道這是在表單內創造競爭條件的事實嗎? – ssrobbi

回答

1

有jQuery中的語法錯誤。你錯過了數據的語法。這應該是這樣的 -

function deleteMediaFromDatabase(val) 
{ 
$.ajax({ url: 'deleteMediaFromDatabase.php', 
    data: {'vals' : val}, 
    type: 'post', 
    dataType:'json', 
    success: function(output) { 
        alert(output); 
       }, 
     error: function(request, status, error){ 
     alert("Error: Could not delete"); 
     } 
}); 
} 
+0

這樣做了!(我沒有包括dataType:'json',它沒有似乎喜歡那樣)。幾天來,我一直在關注這個問題,一直盯着牆壁。謝謝回答! – ssrobbi

+0

此外,你忘了將數據添加到vals中。 – Vishwas

+0

這是我改變的部分。我沒有把你的建議「dataType:'json',」。我嘗試了一下這個建議,但由於某種原因它無法正常工作。 – ssrobbi

-1

變化阿賈克斯語法...

$.ajax({ 
    type: "POST", 
    url: 'deleteMediaFromDatabase.php', 
    data: {'vals' : val},//Have u tried this 
    success: function(output) { 
     alert(output); 
    } 
    error: function(request, status, error){ 
      alert("Error: Could not delete"); 
    } 
); 
+1

進展 現在,它成功地發送了ajax後它就會提醒輸出到我的編碼,但輸出爲「公告:!未定義指數:瓦爾斯在/ XXX/xxx/htdocs/AdminPanel/deleteMediaFromDatabase.php on line 9「 – ssrobbi

+0

我不確定這是否可行,因爲你只是發送一個字符串,但不是一個帶有鍵和值的數組,這就是爲什麼我懷疑它回答了與未定義的索引。謝謝你的回答! – ssrobbi

0

問題可能來自dataType未指定或指定的dataType與服務器返回的不匹配。

明確地設置數據類型,例如, dataType:'json'

並確保您的腳本返回所選數據類型中「編碼」的數據,例如,在PHP中:

echo json_encode($something);

+0

data:{'vals':val} 或 data {vals:val} 兩者都在工作。這個問題不是來自這裏。 – OuzoPower

0

相反的:

$val = $_POST["vals"]; 

使用本:

if (isset($_POST['vals']) { 
    $val = $_POST['vals']; 
} 
+0

我沒有看到區別。如果沒有設置'$ _POST [「vals」]',它將返回空值。如果'$ val'沒有被賦值,它也是空的。因此,無論您將其分配給null還是完全不分配,結果總是相同的。 – Ivar

+0

@Ivar - 如果沒有設置'$ _POST [「vals」]',它將不會返回null,它將與上述錯誤。看到這裏參考 - http://stackoverflow.com/questions/4261133/php-notice-undefined-variable-notice-undefined-index-and-notice-undef – Tom

+0

@thebluefox不是一個錯誤,一個通知。如果在這種情況下嘗試訪問'$ val',則會顯示相同的通知,因爲它是未定義的。這只是在解決問題。 – Ivar