返回Ajax的多个项目 [英] Return multiple items for Ajax

查看:68
本文介绍了返回Ajax的多个项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个python代码,可以搜索ebay来返回搜索字符串的结果。这些代码可以正确执行,并根据需要返回结果,但仅当我使用 print()函数时才返回。我使用json将结果解析到烧瓶页面,使用print()仅打印到控制台,所以我使用return,但是它没有给出所有结果,它只返回一项。

I have this python code that searches ebay to return results for a serach string. The codes executes properly and returns the result as i want but only when i use the print() function. I am parsing the result using json to a flask page, using print() only prints to the console so i used return but it doesn't give all the results, it returns only one item.

如何使代码返回所有结果并将其显示在我的烧瓶页面上?

How do i make the code return all the results and display it on my flask page?

我是python的新手,这是我的第一个项目。我之前曾问过这个问题,并将代码升级到现在的样子,我一直在互联网上寻找解决方案,但我还没有找到。有人请帮我提供一个代码,该代码将返回从搜索中获得的所有结果。

I am new to python and this is my first project. I have asked this question before and got the code upgraded to what it is now and i have been scouring the internet for solution but i haven't found any yet. Someone please help me with a code that will return all the results gotten from the search.

链接到对我有帮助的上一个问题

后端

@app.route('/ebay_page_post', methods=['GET', 'POST'])
def ebay_page_post():
    if request.method == 'POST':

        #Get json format of the text sent by Ajax
        search = request.json['search']

        try:
            #ebaysdk code starts here
            api = finding(appid='JohnOkek-hybridse-PRD-5c2330105-9bbb62f2', config_file = None)
            api_request = {'keywords':search, 'outputSelector': 'SellerInfo', 'categoryId': '293'}
            response = api.execute('findItemsAdvanced', api_request)
            soup = BeautifulSoup(response.content, 'lxml')

            totalentries = int(soup.find('totalentries').text)
            items = soup.find_all('item')

            # This will be returned
            itemsFound = {}

            # This index will be incremented 
            # each time an item is added
            index = 0

            for item in items:
                cat = item.categoryname.string.lower()
                title = item.title.string.lower().strip()
                price = int(round(float(item.currentprice.string)))
                url = item.viewitemurl.string.lower()
                seller = item.sellerusername.text.lower()
                listingtype = item.listingtype.string.lower()
                condition = item.conditiondisplayname.string.lower()

                print ('____________________________________________________________')

                #return json format of the result for Ajax processing
            #return jsonify(cat + '|' + title + '|' + str(price) + '|' + url + '|' + seller + '|' + listingtype + '|' + condition)

                # Adding the item found in the collection
                # index is the key and the item json is the value
                itemsFound[index] = jsonify(cat + '|' + title + '|' + str(price) + '|' + url + '|' + seller + '|' + listingtype + '|' + condition)

                # Increment the index for the next items key
                index+=1

            for key in itemsFound:
                return itemsFound[key]

        except ConnectionError as e:
            return jsonify(e)

Ajax

$(document).ready(function() {
            $(".button").click(function() {
                var search = $(".search").val().trim();
                if (search) {
                    $.ajax({
                        type: 'POST',
                        url: "{{url_for('ebay_page_post')}}",
                        data: JSON.stringify({ 'search': search }),
                        contentType: 'application/json;charset=UTF-8',
                        dataType: "json",
                        success:function(data) {
                            if (data.indexOf("|") >= 0) {
                                var newData = data.split("|");
                                var category = newData[0];
                                var title = newData[1];
                                var price = newData[2]
                                var url = newData[3];
                                var seller = newData[4];
                                var listingType = newData[5];
                                var condition = newData[6];


                                $("#returned").html("");
                                $("#returned").append(returned(category, title, price, url, seller, listingType, condition));
                            } else {
                                $("#returned").html("<label>"+data+"</label>");
                            }
                        }
                    });
                }
            });
        });


        function returned(category, title, price, url, seller, listingType, condition) {
            return '<div class="col-lg-6"> ' +
                            '<div class="box">'+
                                '<div class="icon"><i class="ion-ios-heart-outline"></i></div>' +
                                '<h4 class="title">'+title+'</h4>' +
                                '<h5>'+category+'</h5>' +
                                '<small><a href="'+url+'" target="_blank">Go to site</a></small>'+
                                '<div class="description">' +
                                    'Price: <strong>'+price+'</strong>' +
                                    '<p>Seller: <strong>'+seller+'</strong></p>' +
                                    '<p>'+listingType+'</p>' +
                                    '<p>Condition: '+condition+'</p>' +
                                '</div>' +
                            '</div>' +
                        '</div>'
        }


推荐答案

我可以通过将代码修改为此来解决问题:

I was able to solve the problem by modifying my code to this:

#!/usr/bin/env python

import os
import sys
import pprint
import locale
import time
import datetime
import ebaysdk
from ebaysdk.finding import Connection as finding
from ebaysdk.exception import ConnectionError
from bs4 import BeautifulSoup

from flask import Flask
from flask import request, render_template, jsonify


HTML_OUTPUT = """
    <div class=\"col-lg-6\">
        <div class=\"box wow fadeInLeft\">
            <div class=\"icon\"><img src=\"%s\" alt=\"Item Image\"></div>
            <h4 class=\"title\">%s</h4>
            <ul>
                <li>Price: $ %s</li>
                <li>Seller: %s</li>
                <li>Condition: %s</li>
                <li>Listing Type: %s</li>
            </ul>
            <small><a href="%s" target="_blank">Go to site</a></small>
        </div>
    </div>"""

# Instantiate our Flask class.
app = Flask(__name__)
app.config['TEMPLATES_AUTO_RELOAD'] = True


# Decide which URL will trigger everything...
@app.route('/')
def ebay_serve_page():
    empty_folder()
    return render_template("index.html")

def empty_folder():
    folder = 'static'
    for the_file in os.listdir(folder):
        file_path = os.path.join(folder, the_file)
        try:
            if os.path.isfile(file_path):
                os.unlink(file_path)
            #elif os.path.isdir(file_path): shutil.rmtree(file_path)
        except Exception as e:
            print(e)

# Grab search string entered by user...
@app.route('/ebay_page_post', methods=['GET', 'POST'])
def ebay_page_post():
    if request.method == 'POST':

        #Get json format of the text sent by Ajax
        search = request.json['search']

        try:
            #ebaysdk code starts here
            api = finding(appid='JohnOkek-hybridse-PRD-5c2330105-9bbb62f2', config_file = None)
            api_request = {'keywords':search, 'outputSelector': 'SellerInfo', 'categoryId': '293'}
            response = api.execute('findItemsAdvanced', api_request)
            soup = BeautifulSoup(response.content, 'lxml')

            items = soup.find_all('item')

            # This will be returned
            items_found = []

            for item in items:
                pic = item.PictureURL
                title = item.title.string.strip()
                price = float(item.currentprice.string)
                url = item.viewitemurl.string.lower()
                seller = item.sellerusername.text
                listingtype = item.listingtype.string
                condition = item.conditiondisplayname.string

                print ('____________________________________________________________')

                # Adding the item found in the collection
                items_found.append(HTML_OUTPUT % (pic,
                                                title,
                                                price,
                                                seller,
                                                condition,
                                                listingtype,
                                                url))

            f = open("static/"+search+".html", 'w+')
            for item in items_found:
                f.write("%s" % item)
            f.close()
            return "1"

        except ConnectionError as e:
            return jsonify(e)



if __name__ == '__main__':
    app.run(debug = True)

然后我对此我的ajax调用进行了修正:

Then i modified my ajax call to this:

$(document).ready(function() {
        $(".button").click(function() {
            var search = $(".search").val().trim();
            var file = search + ".html";
            if (search) {
                $.ajax({
                    type: 'POST',
                    url: "{{url_for('ebay_page_post')}}",
                    data: JSON.stringify({ 'search': search }),
                    contentType: 'application/json;charset=UTF-8',
                    dataType: "json",
                    success:function(data) {
                        if (data == "1") {
                            $.ajax({
                                url:"/static/"+file,
                                dataType:'html',
                                success: function(items){
                                    $('#returned').html(items);
                                }
                            });
                        } else {
                            $("#returned").html(data);
                        }
                    }
                });
            }
        });

    });

要查看结果在此处查看

感谢每一位提供帮助的人。

Thanks to every one who helped.

这篇关于返回Ajax的多个项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆