0

私のfooter.phpには、API参照に必要なこのコードがあります

<script type="text/javascript">
  /** Override ajaxSend so we can add the api key for every call **/
  $(document).ajaxSend(function(e, xhr, options) 
  {
      xhr.setRequestHeader("<?php echo $this->config->item('rest_key_name');?>", "<?php echo $this->session->userdata('api_key')?>");
  });
</script>

私のプロジェクトではエラーなく正常に動作しますが、ファイルのアップロードの作業を開始し、ajaxfileupload を使用してファイルをアップロードすると、ファイルをアップロードするたびにこのエラーが発生しました。

TypeError: xhr.setRequestHeader is not a function   
xhr.setRequestHeader("KEY", "123456POIUMSSD");

これが私の ajaxfileuplod プログラム コードです。

<script type="text/javascript">
$(document).ready(function() {

    var DocsMasterView = Backbone.View.extend({
        el: $("#documents-info"),
        initialize: function () {  

        },
        events: {
            'submit' : 'test'
        },
        test: function (e) {
            e.preventDefault();

            var request = $.ajaxFileUpload({
                url             :'./crew-upload-file',
                secureuri       :false,
                fileElementId   :'userfile',
                dataType        : 'json',
                data            : {
                'title'           : $('#title').val()
                },
                success  : function (data, status)
                {
                    if(data.status != 'error')
                    {
                       $('#files').html('<p>Reloading files...</p>');
                       refresh_files();
                       $('#title').val('');

                    }
                    alert(data.msg);
                }
            });

            request.abort();
            return false;

        }
    });
    var x = new DocsMasterView();

});
</script>

ここで誰でも私の問題を解決できますか。私の問題を解決するための提案/アドバイス。

4

1 に答える 1

0

あなたのコメントから私が理解しているように、setRequestHeaders通常の ajax 呼び出しで正常に動作します。同時にご利用の場合ajaxFileUploadはご利用いただけません。最も可能性が高いのは、トランスポート メソッドでヘッダーの設定が許可されていないためです (たとえば、iframe を使用して ajax スタイルでファイルのアップロードをエミュレートする場合)。したがって、考えられる解決策は、フォーム データにキーを配置することです。

 $(document).ajaxSend(function(e, xhr, options) 
  {
      if(xhr.setRequestHeader) {
          xhr.setRequestHeader("<?php echo $this->config->item('rest_key_name');?>", "<?php echo $this->session->userdata('api_key')?>");
       else
          options.data["<?php echo $this->config->item('rest_key_name');?>"] = "<?php echo $this->session->userdata('api_key')?>";
  });

注: options.data が正しいステートメントであるかどうかはわかりません。オプション オブジェクトの構造を覚えていないだけです。提案されたコードが機能しない場合 -console.log(options)投稿する必要があるデータを含むオブジェクトを取得する方法と方法を試してください (次のようなものかもしれませんがoptions.formData、正確には覚えていません)。

サーバー側では、ヘッダーまたはフォーム データのキーを確認するだけで済みます。

于 2013-05-17T08:59:06.040 に答える