$ .ajax没有给出指定的错误,也没有运行php脚本

时间:2014-12-03 09:12:45

标签: javascript php jquery ajax

我在我的PHP代码中使用$ .ajax。我可以记录发送的数据并使用console.log显示它,但是当它到达$ .ajax时。它正在停止显示指定错误或网址状态的白名单。 这就是我如何调用我的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

修改

这是我在firebug中显示的内容,因为您看到我的数据没有问题 enter image description here

3 个答案:

答案 0 :(得分:2)

您可以在HTML5 data-属性中实际存储要传递给函数的数据,而不是使用内联JS:

<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上的点击事件。如果动态添加元素,您可能需要考虑将click事件冒泡到document对象。存储在HTML5数据属性中的值可以通过.attr().data()访问,但我个人更喜欢前者,因为后者不能很好地动态更改data-属性 - 这可能不是在您的申请中的情况,但它是一件好事需要注意。 .data()在运行时获取HTML5数据属性,如果DOM更改,则不会更新对象。

对于AJAX调用,我们可以使用延迟对象和承诺(例如.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调用后发送回您的脚本?如果是,请在dataType: 'JSON'功能中使用$.ajax()

答案 1 :(得分: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>

答案 2 :(得分: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