【问题标题】:Mailchimp ajax SyntaxError on form submissionMailchimp ajax SyntaxError 提交表单
【发布时间】:2017-12-12 08:47:31
【问题描述】:

我可以看到代码中没有错误,但它仍然显示这个 语法错误:缺失;声明前 screenshot

这是表格:

<form id="bildo_mc_form" action="https://stylishcreativity.us3.list-manage.com/subscribe/post-json?u=7c7040d58ca368b8f8063c1ea&amp;id=f67dfc67a4" method="post">
    <input id="mc-email" type="email" name="EMAIL" placeholder="Your Email">
    <label for="mc-email"></label>
    <button type="submit">Send</button>
</form>

这里是 Js:

jQuery("#bildo_mc_form").submit(function(e){
    
    console.log("form submitted");
    
    function callbackFunction(data){
        window.location.href = "http://thanks.com";
        console.log("sucess result" + data.result);
        console.log("sucess msg" + data.msg);
    }

    var url = jQuery(this).prop('action'); // the script where you handle the form input.
    jQuery.ajax({
           type: "GET",
           url: url,
           data: jQuery("#bildo_mc_form").serialize(), // serializes the form's elements.
           dataType: "jsonp",
           contentType: "application/json; charset=utf-8",
           error: function(error){
                // According to jquery docs, this is never called for cross-domain JSONP requests
                console.log("Error Result" + error.result);
            },
           success: callbackFunction
        });

    e.preventDefault(); // avoid to execute the actual submit of the form.
});

我怎样才能摆脱这个问题? 请帮助:)

【问题讨论】:

  • 我已经在 jshint 中验证了你的代码,那里没有问题。你检查过this similar question吗?这可能是同一个问题。
  • 我已经尝试了他们在类似问题上提到的所有可能的修复,但仍然无法正常工作!对于 MailChimp 表单,您必须将 dataType 设置为 JSONP,否则表单将不会提交 prntscr.com/ftf6gj

标签: javascript jquery html ajax mailchimp


【解决方案1】:

既然你通过 ajax 接收到JSON,你应该设置dataType: "json"

不是jsonp

jsonp 响应正在作为函数执行,它会导致错误。

jQuery("#bildo_mc_form").submit(function(e){

    console.log("form submitted");

    function callbackFunction(data){
        window.location.href = "http://thanks.com";
        console.log("sucess result" + data.result);
        console.log("sucess msg" + data.msg);
    }

    var url = jQuery(this).prop('action'); // the script where you handle the form input.
    jQuery.ajax({
           type: "GET",
           url: url,
           data: jQuery("#bildo_mc_form").serialize(), // serializes the form's elements.
           dataType: "json",
           contentType: "application/json; charset=utf-8",
           error: function(error){
                // According to jquery docs, this is never called for cross-domain JSONP requests
                console.log("Error Result" + error.result);
            },
           success: callbackFunction
        });

    e.preventDefault(); // avoid to execute the actual submit of the form.
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="bildo_mc_form" action="https://stylishcreativity.us3.list-manage.com/subscribe/post-json?u=7c7040d58ca368b8f8063c1ea&amp;id=f67dfc67a4" method="post">
    <input id="mc-email" type="email" name="EMAIL" placeholder="Your Email">
    <label for="mc-email"></label>
    <button type="submit">Send</button>
</form>

【讨论】:

  • 如果我将dataType设置为JSON,它会显示另一个错误Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://stylishcreativity.us3.list-manage.com/subscribe/post-json?u=7c7040d58ca368b8f8063c1ea&amp;id=f67dfc67a4&amp;EMAIL=asashfasf%40gmail.com. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).prntscr.com/ftf6gj
  • @Mashiur Ra​​hman,如何处理Cross-Origin 请求是另一个问题。基本上,主机https://stylishcreativity.us3.list-manage.com 应该发送一个有效的‘Access-Control-Allow-Origin’ 响应头。设置方式取决于您使用的网络服务器。
猜你喜欢
  • 2015-03-04
  • 2011-06-17
  • 2014-02-19
  • 2011-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多