2014-12-03 118 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

相关问题