0

まず第一に、私の問題を解決するために jQuery プラグインに頼らないようにお願いしたいと思います。アプリをプラグインで動作させたくないだけです (そして、学習の妨げになります!)

jQuery を使用してバックエンドに渡す一連のフィールドを含むフォームがあります。$.post()これは、jQuery 関数として持っているものです。

 $.post(
    "/item/edit",
    $("#form").serialize(),
    function(responseJSON) {
        console.log(responseJSON);
    },
    "html"
);

これは私がフォームを開いた方法です:

<form action="http://localhost/item/edit" method="post" accept-charset="utf-8" class="form-horizontal" enctype="multipart/form-data"> 

これは codeigniter のform_open()メソッドによって自動生成されたものです (したがって、 action="" に値があるのはなぜですか。ただし、フォームの最後に送信ボタンがないため、これは問題ではありません)

私の#form中には、ファイル入力としてこれがあります:<input type="file" name="pImage" />

適切なボタンが押されて$.post()メソッドが呼び出されると、バックエンドに次のように変数をprint_r($_POST)出力させます。出力された変数には、「pImage」要素がありません。ファイルが配列の要素として表示されないのではないかと考えたので、先に進み、この codeigniter 関数を使用してファイルをアップロードしようとしました$this->upload->do_upload('pImage');。「アップロードするファイルが選択されていません」というエラーが表示されます。

この問題をどのように克服できるかについてのアイデアはありますか?

4

3 に答える 3

1

AJAXを使用して画像を投稿することはできません.PHP jQuery .ajax()ファイルアップロードサーバー側の理解もここで見つけなければなりませんでした

あなたの最善の策は、非表示の iframe を使用して ajax 呼び出しを模倣することです。フォームには enctype を multipart/formdata に設定する必要があります。

于 2012-11-13T23:47:30.930 に答える
0

codeigniter と Ajax ではこれを行うことができません。イメージを base64 に渡し、コントローラーで再度ファイルに変換します。

//the input file type
<input id="imagen" name="imagen" class="tooltip" type="file" value="<?php if(isset($imagen)) echo $imagen; ?>">

//the js
$(document).on('change', '#imagen', function(event) {
  readImage(this);
});

function readImage(input) {
    var resultado='';
    if ( input.files && input.files[0] ) {
        var FR= new FileReader();
        FR.onload = function(e) {
            //console.log(e.target.result);
            subirImagen(e.target.result);
        };       
        FR.readAsDataURL( input.files[0] );
    }
}

function subirImagen(base64){
    console.log('inicia subir imagen');
    $.ajax({
        url: 'controller/sube_imagen',
        type: 'POST',
        data: {
            imagen: base64,
        }
    })
    .done(function(d) {
        console.log(d);
    })
    .fail(function(f) {
        console.log(f);
    })
    .always(function(a) {
        console.log("complete");
    });
}

//and the part of de controller
public function sube_imagen(){
    $imagen=$this->input->post('imagen');
    list($extension,$imagen)=explode(';',$imagen);
    list(,$extension)=explode('/', $extension);
    list(,$imagen)=explode(',', $imagen);
    $imagen = base64_decode($imagen);
    $archivo='archivo.'.$extension;
    file_put_contents('imagenes/'.$archivo, $imagen);
    chmod('imagenes/'.$archivo, 0777); //I use Linux and the permissions are another theme
    echo $archivo; //or you can make another thing
}

ps .: 私の英語でごめんなさい n_nU

于 2015-03-10T15:59:55.710 に答える
0

ファイルは AJAX を使用してサーバー側に送信されませんPHP LETTERの最高かつ最も単純な JQuery Ajax アップローダの 1 つ

通常、ヘッダーに js を含めるだけで、Jquery コードは次のようになります。

$.ajaxFileUpload({

    url:'http://localhost/speedncruise/index.php/snc/upload/do_upload',

    secureuri:false,
    fileElementId:'file_upload',
    dataType: 'json',
    data    : {
        'user_email' : $('#email').val()
    },
    success: function (data, status) {
      //  alert(status);
       // $('#avatar_img').attr('src','data');
       
    }
    ,
    error: function (data, status, e) {
        console.log(e);
    }
});

これがあなたに役立つことを願っています

于 2012-11-14T10:52:16.853 に答える