jQuery AJAX 成功

15

我正在使用jQuery的$.ajax函数来提交表单,虽然它可以正常工作,但我遇到了成功处理的问题。这是我的代码:

$("#form").submit(function () {
        $.ajax({
            type: "POST",
            url: '/login/spam',
            data: formData,
            success: function (dataCheck) {
                if (dataCheck == 'value') {
                     //Do stuff
                }
            }
        });
        return false;
    });

我遇到的问题是if函数一直说dataCheck不等于value。 我知道它确实相等,因为当我删除return false;时,页面显示了value,正如预期的那样。而且,我之前使用过几乎相同的代码,它是可以工作的。有人能给我一些建议吗?


你编辑了这个问题?'749afa42e6621f10bae17ee00cb1f4de'有什么问题吗? - gdoron
6个回答

19

如何自行找到答案:

在代码中插入调试代码,查看从服务器获取到的内容。

$("#form").submit(function () {
        $.ajax({
            type: "POST",
            url: '/login/spam',
            data: formData,
            success: function (dataCheck) {
                console.log(dataCheck); // <==============================
                if (dataCheck == 'value') {
                     //Do stuff
                }
            }
        });
        return false;
    });

它可能不会以你想象的格式出现。


2
如果在return false语句之上的脚本中存在错误,则return false将无法正常工作。preventDefault则可以。因此,我更喜欢使用preventDefault而不是return false; https://dev59.com/RXM_5IYBdhLWcg3wfTO7#4771084 - Shyju
请记住,jQuery将尝试根据响应的MIME类型推断结果的数据类型(因为您没有指定它)。您可能需要根据类型以不同的方式进行评估。 - Jeremy Smith
使用event.preventDefault()的好处是,您可以将其添加为处理程序中的第一行,从而保证无论函数的最后一行是否被执行(例如运行时错误),都不会触发锚点的默认行为。 - Shyju
@Shyju。你已经写过了... :) 我的回应是我不怕运行时错误。我的代码不应该有错误。并且返回false也会停止冒泡。所以……第一行\最后一行?我不在乎… - gdoron

2
如果你想阻止默认行为(在这种情况下是正常的表单提交),请使用 preventDefault 而不是 return false; 即使在 return false 语句之前的脚本出现问题,preventDefault 也可以正常工作。
以下代码应该可以正常工作。
$("#form").submit(function(e) {
   e.preventDefault();
    $.ajax({
        type: "POST",
        url: '/login/spam',
        data: formData,
        success: function (dataCheck) {
            if (dataCheck == 'value') {
                 //Do stuff
            }
        }
    });    
});

正如gdoron所提到的,使用console.debug / alert来查看变量中的值。使用Firebug Net选项卡 / fiddler将帮助您了解从服务器页面得到的响应。

0

我猜 dataCheck 是一个字符串。然后使用 localeCompare()

if (dataCheck.localeCompare('value') == 0) {
    //Do stuff
}
  • 如果 str1str2 之前排序,则返回 -1
  • 如果两个字符串相等,则返回 0
  • 如果 str1str2 之后排序,则返回 1

0

如果(response.indexOf("success")!=-1){ } 尝试使用indexOf()方法


0

我知道可能有点晚,但今天我也遇到了同样的问题。问题在于正确的字符串被返回到了成功的位置,但由于某种原因,在其前面多了一个换行符。本地环境中没有出现这种情况,但当我将其上传到网上时,总是会添加一个换行符到返回的字符串(在你的情况下是dataCheck)。我使用了substr()函数来去掉末尾的换行符,从那以后就一切正常了。


1
这看起来像是猜测,而不是提供可能导致问题逻辑解决方案的事实。 - Adrian Salazar

0

很奇怪。我的建议是你可以使用火狐浏览器的Firebug或其他工具(例如Chrome的开发者工具)来查看xhr响应。

我认为可能是由于错误类型的xhr响应(例如带有HTML标记的'749afa42e6621f10bae17ee00cb1f4de'信封)或一些未修剪的空格导致了错误的结果。

希望这能帮到你 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接