【问题标题】:jQuery AJAX sends data but fires errorjQuery AJAX 发送数据但触发错误
【发布时间】:2012-07-19 07:07:49
【问题描述】:

我在处理来自 AJAX 的表单时遇到了一个奇怪的问题。

它按预期工作,但由于某种原因,它会触发错误而不是成功。

这是代码:

$(".sendBtn").click(function(e) {

    campaigncode = "#####";
    senderemail = "test@email.com";
    subject = "Test";
    sendermessage = "Test";
    targetURL = "www.abc.com";

    email = $(".email").val();

    //Email Validation
    var emailReg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;  
    if( email ==""){//Empty Check
        alert('Please enter your email');
        e.preventDefault();
    } else {
        if(!emailReg.test( email )) {//Email validation
            alert('*Please enter valid email');
            e.preventDefault();
        } else {

    //Ajax Start
    $.ajax({
            url: "http://services.ninemsn.com.au/sendtofriend/sendtofriendService.aspx?showdefaultmessage=true",
            context: document.body,
            type: "POST",
            data: {campaigncode:campaigncode, recipientemail:email, senderemail:senderemail, subject:subject, sendermessage:sendermessage, targetURL:targetURL},
            dataType: "jsonp",
            success: function() {
                alert('Success');
            },
                        error: function() {
                                    alert('Error');
                              }

        });//Ajax End

        }
    }

});

【问题讨论】:

  • AJAX 事件是从同一个域触发还是跨域触发?
  • 从跨域触发,但它可以正常工作,因为我可以接收电子邮件但只是警告错误
  • 猜他的网站不是ninemsn,所以它是跨域的。 @PraveenKumar 但是它是 JSONP,专为跨域设计。
  • 是的,你是对的,斯科蒂。 jsonp 适用于跨域
  • 好吧,我想我认为我要求您提供指向 API 参考的链接很明显。当时我想也许我可以看一下参考资料,看看你的代码是否遗漏了任何东西。现在我或多或少失去了耐心......

标签: jquery


【解决方案1】:

从您的错误来看,this questionthat question 看起来很相似。 “未调用 jQuery_172blah”错误指的是 jsonp 回调(未调用该回调,因为在其他地方解析失败)。我建议...

  1. 尝试设置crossDomain: true,然后也设置dataType:textdataType:text json
  2. 尝试将data 作为字符串而不是字典传递。
  3. 尝试设置jsonp:falsejsonpCallback。请参阅这些上的documentation

例如:

var jsonString = JSON.stringify({
    recipientemail: email
});
$.ajax({
    url: "http://services.ninemsn.com.au/sendtofriend/sendtofriendService.aspx?",
    crossDomain: true,
    dataType: 'text json',
    data: jsonString,
    ...

【讨论】:

  • 但是使用dataType: 'text json', 不会发送数据
  • @Dips:尝试将data 作为 JSON 字符串传递,请参阅上面的建议。
  • 没有进展。还是一样的问题
  • @Dips:您使用的是哪个版本的 jQuery?解析器错误听起来像一个错误,或者某些参数配置不正确......
  • @Dips:如果你能找出导致解析器错误的原因,那就是它。我在上面又添加了一个建议。我真的认为您的data 需要是一个字符串 并使用dataType:json。我猜 ajax() 会导致解析器错误,因为 data 是一个字典...
【解决方案2】:

JSONP 要求将响应包装在某种回调函数中。

尝试将响应记录到控制台以查看发回的内容

success: function(data) { console.log(data); }

另外,尝试使用 $.parseJSON 将响应包装到一个对象中:

success: function(data) {
    var json = $.parseJSON(data);
}

【讨论】:

    【解决方案3】:

    错误在服务器,用“response . AllowGet”发送

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-23
      • 2011-09-30
      • 2017-08-31
      • 2020-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多