【问题标题】:$.get() AJAX call not being able to handle server response$.get() AJAX 调用无法处理服务器响应
【发布时间】:2010-10-09 07:08:58
【问题描述】:

这可能有点搞笑,一开始甚至不知道如何放置标题。可能是因为工作时间过长或者我做错了什么。

我有一个文件,比如comment.php,其中包含类似于:

var params = $('form#myform').serialize();
$.get("/ajax/file.php?"+params, function(data){
    if (data == 'error') {
        $('#message').html('Error');
    } else if (data == 'success') {
        $('#message').html('Success');
    }
});

我用 firebug 进行了检查,一切正常,没有 JS 错误,正在调用文件并返回“错误”或“成功”,但仍然在 ajax 调用的主体中 data 与服务器响应不匹配。然后我改变了

if (data == 'error') {
    $('#message').html('Error');
} else if (data == 'success') {
    $('#message').html('Success');
}

if (trim(data) == 'error') {
    $('#message').html('Error');
} else if (data == 'success') {
    $('#message').html('Success');
}

其中 trim() 是我编写的一个函数,用于删除字符串之前或之后的所有空格。我还尝试使用被称为回显数字的文件并使用 jQuery 进行检查,例如:

if (data == 1) {
    $('#message').html('Error');
} else if (data == 'success') {
    $('#message').html('Success');
} 

没有结果。如果我只 alert(data) 一切看起来都很好。两个文件都在同一个域中。我的代码与示例中的完全一样,只是我有更多 if/else 条件,其中一个应该总是匹配(如果我查看 firebug,它会匹配)。我也尝试使用没有结果的 switch 语句。

我使用这种方法已经有一段时间了,从来没有遇到过任何问题。想法?

【问题讨论】:

  • 我会尝试 alert(typeof data) 来查看类型(并可能指定 jquery dataType 参数)。另外,请注意字符的大小写(大写/小写)。
  • 抱歉,刚刚看到这个,这里是新的 :) 感谢您的帮助,会记住这一点!

标签: php jquery ajax get


【解决方案1】:

.get() 回调回调使用 3 个参数:

  1. 数据
  2. 状态
  3. XMLHttpRequest

所以,你的方法应该有效。请务必注意大小写、标点符号和空格。

我会尝试获取有关data 的更多信息以查明问题:

var params = $('form#myform').serialize();
$.get("/ajax/file.php?"+params, function(data){    
        alert("Type: " + typeof.data +
              "\nContents: ==>" + data + "<==" +
              "\nTrim: ==>" + $.trim(data) + "<==");  // get more info
});

请注意,jQuery 有一个 $.trim() 函数

【讨论】:

  • 我认为它实际上并没有回答为什么比较失败的问题:“如果我只提醒(数据)一切看起来都很好。”
  • 感谢您的提示,但正如 Nikkita 所说,这不是我的问题。我调用的文件实际上回显了一个字符串,它可以是“email”、“name”、“message”等中的任何一个。当我在回调函数中调用 alert(data) 时,它确实会显示“email”、“name”或其他内容,但在比较时会失败,例如 if (data=='email') alert('email');并感谢 $.trim() 函数提示 :)
  • @Claudiu - 这很奇怪。我会尝试了解更多关于data 的信息。只需用各种信息提醒它,这应该会让你明白为什么匹配不起作用。您确定拼写和大小写正确吗?
  • Doh,我的错,我看到了你对 $.trim() 的建议,但由于某种原因我忽略了它。现在工作!关于 jQuery 修剪如何工作的任何想法?到目前为止,我的函数运行良好,通过比较第一个字符并在它等于空格时将其删除,最后一个字符相同,循环......我错过了什么?
  • @Claudiu - 空格不是唯一的空格。可能是制表符或换行符。我还建议使用 [ regex ](regular-expressions.info/examples.html) 来修剪空白 ([\s])。
【解决方案2】:

您不必像这样将序列化数据附加到查询字符串中。 $.get() 将接受三个参数,其中一个是数据的序列化(查询字符串)版本或哈希。然而,这不是你在这里的原因。

数据就是 php 页面打印出来的任何内容。您实际上是从该页面打印出“错误”或“成功”这个词吗?如果没有,那么你正在尝试做的事情是行不通的。

成功回调接受三个参数:data、textStatus(响应)和 xhr。怎么样:

$.get("/ajax/file.php", $("#myform").serialize(), function (data, status) {
   if (status == 'error') {
      $('#message').html('Error');
   }
   else if (status == 'success') {
      $('#message').html('Success');
   }
});

【讨论】:

  • 你确实意识到你告诉我的基本上和彼得一样,对吧?尽管如此,感谢您在发送参数方面的帮助,我认为唯一的其他解决方案是 $.get('file.php', {key:value}....
  • 对不起,我们几乎在同一时间发布。我确实意识到存在信息重叠,但我认为我提到的其他参数是非常相关的(我在他编辑之前就有了:))。
猜你喜欢
  • 1970-01-01
  • 2011-11-04
  • 1970-01-01
  • 1970-01-01
  • 2021-11-24
  • 2012-03-24
  • 2011-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多