Rumah  >  Artikel  >  hujung hadapan web  >  Data json yang dikembalikan dengan memuat naik fail akan digesa untuk memuat turun kemahiran solution_javascript masalah

Data json yang dikembalikan dengan memuat naik fail akan digesa untuk memuat turun kemahiran solution_javascript masalah

WBOY
WBOYasal
2016-05-16 16:29:281411semak imbas

Dalam projek baru-baru ini, data json yang dikembalikan dengan memuat naik fail akan digesa untuk memuat turun Masalah ini hanya berlaku dalam IE10. Bahagian hadapan menggunakan ajaxForm pemalam jQuery untuk menyerahkan borang, dan format data yang dikembalikan oleh latar belakang ialah json. Kodnya adalah seperti berikut:

Ular Sawa Bahagian Belakang:

Salin kod Kod adalah seperti berikut:

def jsonp(func):
"""Membungkus output JSONified untuk permintaan JSONP."""
@wraps(func)
def decorated_function(*args, **kwargs):
​​​​ panggil balik = request.args.get('callback', False)
Temp_content = func(*args, **kwargs)
           jika isinstance(temp_content, dict):
              temp_content.setdefault('berjaya', Benar)
                temp_content.setdefault('code', 200)
            cuba:
                 temp_content = json.dumps(temp_content, indent=4)
              kecuali UnicodeDecodeError:
                  cuba:
                   temp_content = ujson.dumps(temp_content)
                   kecuali StandardError sebagai e:
Logger.exception(e)
                  temp_content = json.dumps({'success': False, 'code': 500, 'info': 'INVALID_CONTENT'})
             temp_content = cgi.escape(temp_content)
              jika panggil balik:
                    # Berdasarkan http://evilcos.me/?p=425, jsonp menambah /**/Kepala akan lebih selamat
kandungan = '/**/' str(panggilan balik) '(' temp_content ')'
                mimetype = 'application/javascript'
pengepala = {'charset':'utf-8'}
                  kembalikan current_app.response_class(content, mimetype=mimetype, headers=headers)
             lain:
                mimetype = 'application/json'
pengepala = {'charset':'utf-8'}
kandungan = temp_content
                  kembalikan current_app.response_class(content, mimetype=mimetype, headers=headers)
​​ elif isinstance(temp_content, basestring):
             temp_content = cgi.escape(temp_content)
               kembalikan temp_content
        lain:
               kembalikan temp_content
Kembalikan fungsi_hiasan
@mod.route('/patch/install.json', method=['POST'])
@jsonp
def patch_install():
Kembalikan {'data': 'data'}

Kod js bahagian hadapan:

Salin kod Kod adalah seperti berikut:

$('#form').ajaxSubmit({
URL : '/patch/install.json',
Taip : 'post',
Jenis Data: 'json',
iframe : benar,
Kejayaan: function(res) {
            // kod
}
});

Penyelesaian:
Adalah perlu untuk menukar format data yang dikembalikan oleh bahagian belakang kepada format teks/html, seperti berikut:

Salin kod Kod adalah seperti berikut:

def plain(func):
"""balut teks/ respons html"""
@wraps(func)
def _inner(*args, **kwargs):
          resp = func(*args, **kwargs)
          jika isinstance(resp, dict):
               resp.setdefault('berjaya', Benar)
                resp.setdefault('kod', 200)
               resp = json.dumps(resp)
              resp = cgi.escape(resp)
                return current_app.response_class(resp, mimetype='text/html', headers={'charset': 'utf-8'})
         elif isinstance(resp, basestring):
              resp = cgi.escape(resp)
                return current_app.response_class(resp, mimetype='text/html', headers={'charset': 'utf-8'})
        lain:
              balas respons
Kembali _dalam
@mod.route('/patch/install.json', method=['POST'])
@biasa
def patch_install():
Kembalikan {'data': 'data'}

Nota: Bahagian belakang contoh ini menggunakan Python Jika anda menghadapi masalah yang sama dalam projek, tukarkannya kepada bahasa yang sepadan

Untuk meringkaskan, sebenarnya, untuk menyelesaikan masalah ini, cukup letakkan dalam satu ayat: "Tukar format data yang dikembalikan oleh bahagian belakang kepada format teks/html"

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn