首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >$.ajax没有提供指定的错误,也没有运行php脚本。

$.ajax没有提供指定的错误,也没有运行php脚本。
EN

Stack Overflow用户
提问于 2014-12-03 09:12:45
回答 3查看 182关注 0票数 3

我在我的php代码中使用$.ajax。我可以记录发送的数据并用console.log显示,但当它到达$.ajax时。它正在停止白化,显示指定的错误或url状态。我就是这样调用javascript函数的。

代码语言:javascript
复制
<div class="tagfav price" onclick="addfavourite(<?php echo $row_all_ad['skopeo_annonce_immo_id']; ?>,<?php echo $_SESSION['user']['id'];?>)"></div>

这是我的javascript函数。

代码语言: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文件正在导航器中运行。它现在只有这一行用于检查问题的代码。

代码语言:javascript
复制
<?php die('test'); ?>

没有显示指定的错误。虽然它显示URL POST问题,但是Firebug也没有显示url状态问题。我的函数在到达ajax时就停止了。

它也没有显示第二个console.log

编辑

这就是我在firebug中显示的内容,正如您所看到的,我正在毫无问题地获取数据。

EN

回答 3

Stack Overflow用户

发布于 2014-12-03 09:25:01

与使用内联JS不同,您实际上可以将希望传递给函数的数据存储在HTML5 data-属性中:

代码语言:javascript
复制
<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对象冒泡的click事件。存储在HTML5数据属性中的值可以通过.attr().data()访问,但我个人更喜欢前者,因为后者对于动态更改data-属性并不有效--这在您的应用程序中可能不是这样,但值得注意的是。.data()在运行时获取HTML5数据属性,如果DOM更改,则不会更新对象。

对于AJAX调用,我们可以通过使用延迟对象和承诺(如.fail().done()等)来查看实际发生的情况来排除问题。接收三个参数的.fail()函数:jqXHRtextStatuserrorThrown。在下面的代码中,如果出了问题,AJAX调用将在控制台中记录错误消息。

代码语言:javascript
复制
$('.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);
    });
});

此外,还提供了一些有用的检查指针:

  • 您的assets/test.php脚本是否设置为由$_POST接收数据?你也许应该检查一下。
  • 相同的脚本是否呼应了JSON编码的字符串,该字符串将在AJAX调用之后发送回您的脚本?如果是这样,请在您的dataType: 'JSON'函数中使用$.ajax()
票数 2
EN

Stack Overflow用户

发布于 2014-12-03 09:16:57

您应该在javascript函数回调的参数周围添加单引号。

或者,javascript会将您的参数视为javascript关键字,如:this

因此,改变:

代码语言:javascript
复制
<div class="tagfav price" onclick="addfavourite(<?php echo $row_all_ad['skopeo_annonce_immo_id']; ?>,<?php echo $_SESSION['user']['id'];?>)"></div>

代码语言:javascript
复制
<div class="tagfav price" onclick="addfavourite('<?php echo $row_all_ad['skopeo_annonce_immo_id']; ?>','<?php echo $_SESSION['user']['id'];?>')"></div>
票数 1
EN

Stack Overflow用户

发布于 2014-12-03 09:26:05

尝尝这个

代码语言: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:formData},     
        type: "POST",
        success: function(data) {
            console.log(data);
            return false;
        }
    });
}

代码语言:javascript
复制
<?php echo($_POST['formData']); ?>

输出应该是您的formData

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27267629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档