【问题标题】:Post Forms Using Javascript URL使用 Javascript URL 发布表单
【发布时间】:2011-12-07 18:15:56
【问题描述】:

我正在尝试将表单提交到不是我自己的网站(salesforce.com 及其 web-to-lead 功能),并且我正在通过 javascript 模式窗口进行。

基本上,一旦所有条目都经过测试并确保没有错误,我就使用这个:

if(error_count == 0) {
                $.ajax({
                    type: "POST",
                    url: "[salesforce url]",
                    data: "first_name=" + first_name + "&last_name=" + last_name + "&email=" + email + "&firm=" + firm + "&[salesforceid]=" + AUM + "&[salesforceid]=" + custodian + "&[salesforceid]=" + custodian_other,
                    error: function() {
                        $('.error').hide();
                        $('#sendError').slideDown('slow');
                    },
                    success: function () {
                        $('.error').hide();
                        $('.success').slideDown('slow');
                        $('form#callToAction').fadeOut('slow');
                    }               
                }); 
            }

如果在不使用 javascript 的情况下测试表单并且 url 有效,那么我在想 javascript 处理 url 的方式可能是问题?

问题:数据未成功提交到 Salesforce。同样,常规的 HTML 表单有效,而 javascript 无效。因此,我已将其确定为 javascript 问题。

【问题讨论】:

  • 您有实际问题吗?您对代码中的某些内容有疑问吗?
  • 抱歉,刚刚在最后添加了问题。
  • 我认为您正在尝试对跨域(salesforce)服务器进行 ajax 调用......这是不可能的。

标签: javascript forms post


【解决方案1】:

除非接收服务器允许并且浏览器支持 CORS,否则您不能发出 XHR 跨域请求。但是,您可以像这样进行盲目提交,这将假定成功:

var $form = $("<form>", {
    method: "POST",
    action: "[salesforce url]",
    target: "my-iframe"
}).appendTo("body");

var $iframe = $("<iframe>", {
    name: "my-iframe"
}).bind( "load", function () {
    $('.error').hide();
    $('.success').slideDown('slow');
    $('form#callToAction').fadeOut('slow');
    $iframe.remove();
    $form.remove();
}).appendTo("body");

$.each(("first_name=" + first_name + "&last_name=" + last_name + "&email=" + email + "&firm=" + firm + "&[salesforceid]=" + AUM + "&[salesforceid]=" + custodian + "&[salesforceid]=" + custodian_other).split("&")), function (index, value) {
    var pair = value.split("=");
    $form.append("<input>", {
        type: "hidden",
        name: pair[0],
        value: pair[1]
    });
});

$form.submit();

【讨论】:

    【解决方案2】:

    +1 吉姆·何塞。这种事情可能会被解释为针对用户的 XSS 攻击,因此很可能浏览器不会允许。

    您可以查看浏览器的错误日志,看看在尝试运行脚本时是否存在任何安全错误。如果这不起作用,请尝试安装 Firebug 之类的工具,看看它是否可以查明问题。

    您还可以通过为错误函数尝试不同类型的方法签名来改进错误处理,如下所示:

    error: function(jqXHR, textStatus, errorThrown) {...}
    

    通过这种方式,您可以检查 Ajax 调用引发的错误类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多