2014-12-03 28 views
3

我在使用$ .ajax進入我的php代碼。我可以記錄發送的數據並用console.log顯示它,但是當它達到$ .ajax時。它會停止顯示指定錯誤或url狀態。 這就是我打電話給我的javascript功能。

<div class="tagfav price" onclick="addfavourite(<?php echo $row_all_ad['skopeo_annonce_immo_id']; ?>,<?php echo $_SESSION['user']['id'];?>)"></div> 

這是我的javascript函數。

function addfavourite(id_annonce,id_user){ 
    var formData = "skopeo_user_id="+id_user+"&skopeo_annonce_immo_id="+id_annonce; 
    console.log(formData); 
    $.ajax({ 
     url: "assets/test.php", 
     data: formData,  
     type: "POST", 
     success: function(data, html) { 
      console.log('added to favourite'); 
      return false; 
     } 
    }); 
} 

用於導入ajax的url屬性的php文件正在運行到導航器中。它現在只有這一行代碼用於檢查問題。

<?php die('test'); ?> 

沒有顯示指定的錯誤。雖然它顯示URL POST問題,但Firebug也沒有顯示URL狀態問題。 我的函數在達到ajax時停止。
它也不顯示第二個console.log

編輯

這是我所顯示的爲螢火蟲,正如你看到的我得到我的數據不會有問題 enter image description here

+0

你看到'的console.log(FORMDATA)'控制檯消息? – Barmar 2014-12-03 09:19:45

+0

請勿使用內嵌JavaScript。這不是2003 – 2014-12-03 09:22:11

+0

@Barmar是的,我顯示他們沒有問題。正如我所說,它在達到$ .ajax時開始。 – 2014-12-03 09:24:15

回答

1

你應該在javascript函數週圍添加參數單引號回電話。

Othrewise,javascript中會考慮你的論點像JavaScript的關鍵字:this

所以,變化:

<div class="tagfav price" onclick="addfavourite(<?php echo $row_all_ad['skopeo_annonce_immo_id']; ?>,<?php echo $_SESSION['user']['id'];?>)"></div> 

<div class="tagfav price" onclick="addfavourite('<?php echo $row_all_ad['skopeo_annonce_immo_id']; ?>','<?php echo $_SESSION['user']['id'];?>')"></div> 
+1

如果這些ID是數字,則不需要是字符串。 – Barmar 2014-12-03 09:18:49

+0

我將沒有問題的數據顯示在console.log中。他們不是字符串,但數字,所以我沒有這個問題。 – 2014-12-03 09:27:15

2

而不是使用內聯JS,你可以實際存儲您想通過HTML5 data-屬性將數據傳遞給您的函數:

<div class="tagfav price" data-annonce-immo-id="<?php echo $row_all_ad['skopeo_annonce_immo_id']; ?>" data-user-id="<?php echo $_SESSION['user']['id'];?>"></div> 

然後,聽取.tagfav.price上的點擊事件。如果元素是動態添加的,您可能需要考慮監聽冒泡到document對象的點擊事件。存儲在HTML5數據屬性中的值可以通過.attr().data()來訪問,但我個人更喜歡前者,因爲後者對於動態更改data-屬性不起作用 - 這可能不是您的應用程序中的情況,但這對於注意。 .data()在運行時獲取HTML5數據屬性,並且如果DOM發生更改,則不會更新該對象。

對於AJAX調用,我們可以使用延遲對象和promise(例如.fail().done()等)來查看實際發生的情況。接收3個參數的.fail()函數:jqXHRtextStatuserrorThrown。在下面的代碼中,如果出現錯誤,您的AJAX調用將在控制檯中記錄錯誤消息。

$('.tagfav.price').click(function() { 
    // Construct data object 
    var formData = { 
     'skopeo_user_id': $(this).attr('data-user-id'), 
     'skopeo_annonce_immo_id': $(this).attr('data-annonce-immo-id') 
    }; 

    // Make AJAX call 
    var $fav = $.ajax({ 
     url: 'assets/test.php', 
     data: formData, 
     dataType: 'JSON', // Optional, jQuery intelligently guesses but good to have 
     type: 'POST' 
    }); 

    // Check AJAX status using deferred objects and promises 
    $fav.done(function(data, html) { 
     console.log('added to favourite'); 
    }).fail(function(jqXHR, textStatus, errorThrown) { 
     console.log(textStatus + ': ' + errorThrown); 
    }); 
}); 

此外,一些有用的指針來檢查:

  • 是你的PHP腳本,assets/test.php,設置由$_POST接收數據?你可能想檢查一下。
  • 相同的腳本是否會回顯JSON編碼的字符串,該字符串在AJAX調用完成後會發送回您的腳本?如果是這樣,請在您的$.ajax()函數中使用dataType: 'JSON'
+0

我試過了你的腳本。這是什麼顯示在console.log 錯誤: – 2014-12-03 09:49:25

+0

console.log顯示一個空的錯誤。 – 2014-12-03 09:50:31

+0

然後,您的AJAX調用似乎沒有通過,可能是由於服務器錯誤。你有沒有檢查你的PHP腳本是否工作?另外,文件「assets/test.php」是否存在? – Terry 2014-12-03 09:51:42

0

試試這個

function addfavourite(id_annonce,id_user){ 
    var formData = "skopeo_user_id="+id_user+"&skopeo_annonce_immo_id="+id_annonce; 
    console.log(formData); 
    $.ajax({ 
     url: "./assets/test.php", 
     data: {formData:formData},  
     type: "POST", 
     success: function(data) { 
      console.log(data); 
      return false; 
     } 
    }); 
} 

,並在PHP

<?php echo($_POST['formData']); ?> 

輸出應該是你FORMDATA