Próbuję dodać produkty do bazy danych, wraz z kilkoma zdjęciami, strona serwera jest PHP. Chcę przesłać wszystko asynchronicznie przez AJAX. Chcę, aby zdjęcia zapisane w nazwie katalogu po identyfikatorze produktu (thumbs/productID).

Pierwsza część, która składa się z informacji o produkcie i pobieranie tego identyfikatora. Jednak podczas przesyłania plików nie mogę przesłać zarówno plików, jak i ciągów, aby poinformować mój skrypt, w którym folder, aby zapisać. Nie mogę wysłać tylko plików.

Czy jest jakiś sposób, aby wysłać zarówno pliki, jak i tekst w tym samym czasie? Wszelka pomoc byłaby doceniona.

$('#register-product').on('submit', function ( evt ) {
    evt.preventDefault();
    var i = 0, len = document.getElementsByName("images").length-1, reader, file;
    var myFiles = document.getElementsByName("images");
    // Adds all files to formdata
    for ( ; i < len; i++ ) {
        file = myFiles[i].files[0];
        if (!!file.type.match(/image.*/)) {
            if ( window.FileReader ) {
                reader = new FileReader();
                reader.readAsDataURL(file);
            }
            if (formdata) {
                formdata.append("images[]", file);
            }
        }   
    }
    // Send data to the server.
    if (formdata) {
        $.ajax({ 
            url: "upload.php",
            type: "POST",
            // data: formdata, // This is correct
            data: {formdata, id: 1}, // This doesn't work
            processData: false, 
            contentType: false,
            success: function (res) {
                console.log(res);
            }
        });
    }
});
1
João Gonçalves 9 sierpień 2012, 15:01

2 odpowiedzi

Najlepsza odpowiedź

Po prostu załóż kolejną wartość do formdaty:

//...
formdata.append("id", 1);
if (formdata) { //...

Możesz uzyskać do niego dostęp, ponieważ nie przez $ _Post ["ID"].

1
DerWaldschrat 9 sierpień 2012, 11:04

Nie możesz wysyłać plików za pomocą żądania Ajax Post.

Dane nagłówka dla plików nie zostaną wysłane.

Więc musisz zrobić kilka sztuczek iFrame lub użyć API pliku.

1
BlueEyes 9 sierpień 2012, 11:55