Публикация форм с использованием Javascript URL - PullRequest
2 голосов
/ 07 декабря 2011

Я пытаюсь отправить форму на веб-сайт, не принадлежащий мне (salesforce.com с их функцией «ведущий»), и делаю это через модальное окно 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-адрес работает, я думаю, что проблема в способе обработки URL-адресом в javascript?

Проблема: данные не будут успешно отправлены в Salesforce. Опять же, обычная форма HTML работает, javascript - нет. Поэтому я определил это как проблему с JavaScript.

Ответы [ 2 ]

3 голосов
/ 07 декабря 2011

Вы не можете сделать кросс-доменный запрос XHR, если принимающий сервер не разрешил его и браузер не поддерживает CORS. Тем не менее, вы можете сделать слепую отправку, как это, что приведет к успеху:

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();
1 голос
/ 07 декабря 2011

+ 1 для Джима Хосе.Подобные вещи могут быть истолкованы как XSS-атака на пользователя, поэтому, скорее всего, браузер не допустит этого.

Вы можете проверить журналы ошибок вашего браузера, посмотреть, есть ли какие-либо ошибки безопасности при попыткезапустить свой скриптЕсли это ничего не дает, попробуйте установить инструмент, такой как Firebug, и посмотрите, сможет ли он точно определить проблему.

Вы также можете улучшить обработку ошибок, попробовав другой вид сигнатуры метода для функции ошибки,как это:

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

Таким образом, вы можете проверить, какая ошибка выдается при вызове Ajax.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...