Отправить форму данных через объект XMLHttpRequest в JS?(кросс-браузер) - PullRequest
4 голосов
/ 27 ноября 2011

Я пытаюсь опубликовать данные формы в формате js:

У меня есть этот код:

var formData = new FormData();
  formData.append("username", "Groucho");
  formData.append("accountnum", 123456);
  formData.append("afile", "2");

var xhr = new XMLHttpRequest();
xhr.open("POST", "http://xxxxx/xx.ashx",true);
xhr.send(formData);

Данные формул согласно MDN недоступны в IE (или неизвестны).

Когда я пытаюсь это сделать в FF :

enter image description here (я думаю, это нормально ...).

, когда я пытаюсь в IE :

enter image description here

Что является решением для публикации данных формы (или моих данных, но объективным способом) CROSSBROWSER?

Ответы [ 2 ]

7 голосов
/ 24 июля 2012

Я написал простую оболочку, которую вы можете использовать для отправки FormData в IE (и в webkit / gecko это тоже ничего не испортит).Просто включите следующие js, прежде чем пытаться использовать FormData:

var ieFormData = function ieFormData(){
if(window.FormData == undefined)
{
    this.processData = true;
    this.contentType = 'application/x-www-form-urlencoded';
    this.append = function(name, value) {
        this[name] = value == undefined ? "" : value;
        return true;
    }
}
else
{
    var formdata = new FormData();
    formdata.processData = false;
    formdata.contentType = false;
    return formdata;
}

}

Теперь просто переключите все новые вызовы FormData () на новый ieFormData () и переключите

processData: false, 
contentType: false,

до

processData: formdata.processData,
contentType: formdata.contentType,
cache: false,

и все готово.Конечно, это не позволит вам включать файлы (вам все еще нужен взлом iframe), но это позволит вам имитировать FormData в IE.

3 голосов
/ 17 февраля 2012

Вы не сказали, какую версию IE вы используете.Объект formData не поддерживается в IE9 или ниже.XMLHTTPRequest2 (который содержит объект formData) должен поддерживаться в IE10 (http://caniuse.com/xhr2)

Кросс-браузерная загрузка файла AJAX сейчас очень трудна. Вы могли бы попробовать создать свою собственную формузаголовок / границы в Javascript (см. ответ здесь: XMLHttpRequest POST multipart / form-data ), но лично я не верю, что оно того стоит.

...