AJAX成功回调警报不起作用?

时间:2022-10-22 08:06:18

I've checked out various other posts on SO, but I don't seem to see the problem, and was hoping if you could help me shed some light on this issue. Basically, I'm doing a microblogging appliation and inserting a tweet when a button is clicked, which calls the jQuery ajax function. Here's the respective code:

我已经检查了其他各种关于SO的帖子,但我似乎没有看到问题,并希望你能帮助我解决这个问题。基本上,我正在进行微博应用并在点击按钮时插入推文,该按钮调用jQuery ajax函数。这是相应的代码:

home.js

This is the ajax jquery call

这是ajax jquery调用

function sendTweet(single_tweet) {
var tweet_text = $("#compose").val();

tweet_text = tweet_text.replace(/'/g, "'");
tweet_text = tweet_text.replace(/"/g, """); 

var postData = {
    author      :   $("#username").text().split("@")[1],    // be careful of the @! - @username
    tweet       :   tweet_text,
    date        :   getTimeNow()
};

$.ajax({
    type        :   'POST',
    url         :   '../php/tweet.php', 
    data        :   postData,
    dataType    :   'JSON',
    success     :   function(data) {
        alert(data.status);
    }
})
}

The ajax call works successfully, and the tweet is inserted, but I can't get the alert call to fireback under the success parameter. I tried something basic like alert('abc'); but it didn't work either.

ajax调用成功,并且插入了推文,但我无法在success参数下获得对fireback的警报调用。我尝试了像alert('abc')这样基本的东西;但它也没有用。

tweet.php

This is just a wrapper, looks like this:

这只是一个包装器,看起来像这样:

<?php
include 'db_functions.php';

$author = $_POST['author'];
$tweet  = $_POST['tweet'];
$date   = $_POST['date'];

insert_tweet($author, $tweet, $date);

$data = array();
$data['status'] = 'success';
echo json_encode($data);
?>

This just inserts the tweet into the database, and I wanted to try sending simple JSON formatted data back, but data.status didn't work on the success callback.

这只是将推文插入数据库,我想尝试发回简单的JSON格式数据,但data.status对成功回调不起作用。

db_functions.php

This is where the insert_tweet function is in, and it looks like this:

这是insert_tweet函数所在的位置,它看起来像这样:

function insert_tweet($author, $tweet, $date) {
global $link;
$author_ID = get_user_ID($author);
$query =    "INSERT INTO tweets (`Author ID`, `Tweet`, `Date`) 
            VALUES ('{$author_ID}', '{$tweet}', '{$date}')";
$result = mysqli_query($link, $query);
}

I've tested it, and I'm pretty sure this runs fine. I doubt this is the cause of the problem, but if it is, I'm all ears. I've tested the $link, which is defined in another file included in the top of the db_functions.php file, and this works.

我已经测试过了,我很确定它运行良好。我怀疑这是问题的原因,但如果是,我全都听见了。我已经测试了$ link,它是在db_functions.php文件顶部包含的另一个文件中定义的,这是有效的。

Would appreciate some advice regarding this, thanks!

非常感谢有关此的一些建议,谢谢!

UPDATE

Changed success to complete, and it works. However, the data object seems a bit odd:

改变成功完成,它的工作原理。但是,数据对象似乎有点奇怪:

data.status pops up 200 in the alert

data.status在警报中弹出200

I tried changing the JSON array element name to data['success'] in PHP, and accessed it in the front end with data.success, and it outputted this in the alert box:

我尝试在PHP中将JSON数组元素名称更改为data ['success'],并使用data.success在前端访问它,并在警告框中输出:

function () {
            if ( list ) {
                // First, we save the current length
                var start = list.length;
                (function add( args ) {
                    jQuery.each( args, function( _, arg ) {
                        var type = jQuery.type( arg );
                        if ( type === "function" ) {
                            if ( !options.unique || !self.has( arg ) ) {
                                list.push( arg );
                            }
                        } else if ( arg && arg.length && type !== "string" ) {
                            // Inspect recursively
                            add( arg );
                        }
                    });
                })( arguments );
                // Do we need to add the callbacks to the
                // current firing batch?
                if ( firing ) {
                    firingLength = list.length;
                // With memory, if we're not firing then
                // we should call right away
                } else if ( memory ) {
                    firingStart = start;…

What does this mean??

这是什么意思??

UPDATE 2

Okay, I don't know if this helps, but I've printed the console log from Chrome's inspector, and if I'm not mistaken, the JSON data is sent back just fine. Here's the entire log:

好吧,我不知道这是否有帮助,但是我已经从Chrome的检查员打印了控制台日志,如果我没有弄错的话,JSON数据会被发回。这是整个日志:

Object {readyState: 4, getResponseHeader: function, getAllResponseHeaders: function, setRequestHeader: function, overrideMimeType: function…}
abort: function ( statusText ) {
always: function () {
complete: function () {
arguments: null
caller: null
length: 0
name: ""
prototype: Object
__proto__: function Empty() {}
<function scope>
done: function () {
error: function () {
fail: function () {
getAllResponseHeaders: function () {
getResponseHeader: function ( key ) {
overrideMimeType: function ( type ) {
pipe: function ( /* fnDone, fnFail, fnProgress */ ) {
progress: function () {
promise: function ( obj ) {
readyState: 4
responseJSON: Object
    status_success: "success"
    __proto__: Object
    responseText: "{"status_success":"success"}"
    status_success: "success"
__proto__: Object
responseText: "{"status_success":"success"}"
setRequestHeader: function ( name, value ) {
state: function () {
status: 200
statusCode: function ( map ) {
statusText: "OK"
success: function () {
then: function ( /* fnDone, fnFail, fnProgress */ ) {
__proto__: Object
__defineGetter__: function __defineGetter__() { [native code] }
__defineSetter__: function __defineSetter__() { [native code] }
__lookupGetter__: function __lookupGetter__() { [native code] }
__lookupSetter__: function __lookupSetter__() { [native code] }
constructor: function Object() { [native code] }
hasOwnProperty: function hasOwnProperty() { [native code] }
isPrototypeOf: function isPrototypeOf() { [native code] }
propertyIsEnumerable: function propertyIsEnumerable() { [native code] }
toLocaleString: function toLocaleString() { [native code] }
toString: function toString() { [native code] }
valueOf: function valueOf() { [native code] }
get __proto__: function __proto__() { [native code] }
set __proto__: function __proto__() { [native code] }

UPDATE 3

Console error scrn shot

控制台错误scrn拍摄

AJAX成功回调警报不起作用?

3 个解决方案

#1


1  

Try this:

$.ajax({
    type        :   'POST',
    url         :   '../php/tweet.php', 
    data        :   postData,
    dataType    :   'json',
    complete     :   function(data) {
        alert(data.status);
    }
})

#2


0  

Try the below code. I've added content type while sending data to server, parseJson method in success method,

请尝试以下代码。我在向服务器发送数据时添加了内容类型,在成功方法中使用了parseJson方法,

$.ajax({
         url: "../php/tweet.php",
         data: '{"author": "' + $("#username").text().split("@")[1] + '","tweet": "' + tweet_text + '","date": "' + getTimeNow() + '"}',
         dataType: "json",
         contentType: "application/json; charset=utf-8",
         type: "POST",
         success: function (data) {
             var myResult = $.parseJSON(data);
         },
         error: function (err) {
                alert(err)
         }
      });

if you have any clarification you can go through jquery ajax document

如果您有任何说明,可以查看jquery ajax文档

Note:it's helpful for you if you add callback for error method

注意:如果为error方法添加回调,它会对您有所帮助

#3


0  

Try to set content type in your PHP file:

尝试在PHP文件中设置内容类型:

header( 'Content-Type: application/json' );

Then echo your data:

然后回显你的数据:

echo json_encode( $data );

And stop the script:

并停止脚本:

exit;

Hope it helps!

希望能帮助到你!

#1


1  

Try this:

$.ajax({
    type        :   'POST',
    url         :   '../php/tweet.php', 
    data        :   postData,
    dataType    :   'json',
    complete     :   function(data) {
        alert(data.status);
    }
})

#2


0  

Try the below code. I've added content type while sending data to server, parseJson method in success method,

请尝试以下代码。我在向服务器发送数据时添加了内容类型,在成功方法中使用了parseJson方法,

$.ajax({
         url: "../php/tweet.php",
         data: '{"author": "' + $("#username").text().split("@")[1] + '","tweet": "' + tweet_text + '","date": "' + getTimeNow() + '"}',
         dataType: "json",
         contentType: "application/json; charset=utf-8",
         type: "POST",
         success: function (data) {
             var myResult = $.parseJSON(data);
         },
         error: function (err) {
                alert(err)
         }
      });

if you have any clarification you can go through jquery ajax document

如果您有任何说明,可以查看jquery ajax文档

Note:it's helpful for you if you add callback for error method

注意:如果为error方法添加回调,它会对您有所帮助

#3


0  

Try to set content type in your PHP file:

尝试在PHP文件中设置内容类型:

header( 'Content-Type: application/json' );

Then echo your data:

然后回显你的数据:

echo json_encode( $data );

And stop the script:

并停止脚本:

exit;

Hope it helps!

希望能帮助到你!