普段ajaxするときはlocalhost/hoge/index.pyなどのURLでアクセスして、ajax(jquery)のURL指定は、

```

    $.ajax({
      url : 'index.py' 
    })
    
```

のように、サーバのルート以下にあるhtml起点でやりますが、  
chrome拡張のpopupからajaxリクエストを投げる場合、popup.js内では以下でいいんでしょうか？

```

    $.ajax({
      url : 'http://localhost/hoge/index.py'
    })
    
```

200が返ってるので成功はしていますが、これだとサーバ側のコードがそのまま返ってきてしまいます。サーバ側のContent-
typeをtext/htmlやapplication/jsonにしてみましたが、変わらず見当がつきません。

また、サーバーは`python -m http.server --cgi`で起動したPythonの開発サーバーを使っています。

初歩的で恐縮ですがよろしくお願いします。

追記：popup側コード

```

    $('#button').click(function(){
        chrome.windows.create({url : chrome.runtime.getURL("select_list/index.html")}, function(wins){
            $.ajax({
                url : 'http://localhost:8000/chrome-ex-template-master/src/cgi-bin/index.py',
                cache : false
            }).done(function(data){
                console.log(data)
                chrome.tabs.query({active : true, currentWindow : true}, function(tabs){
                    chrome.tabs.sendMessage(wins.tabs[0].id, {"rows" : data})
                })
            }).fail(function(jqXHR, textStatus, errorThrown){
                console.log(jqXHR, textStatus, errorThrown)
            })
        })
    
    })
    
```

python側のコードは以下です。

```

    #!C:\Users\bafcom\venv\Scripts\python
    from __future__ import print_function
    import pickle
    import os.path
    from googleapiclient.discovery import build
    from google_auth_oauthlib.flow import InstalledAppFlow
    from google.auth.transport.requests import Request
    import json
    
    
    print('Content-type: application/json')
    print('Access-Control-Allow-Origin : "*"\n\n')
    cgitb.enable()
    # If modifying these scopes, delete the file token.pickle.
    SCOPES = ['https://www.googleapis.com/auth/spreadsheets.readonly']
    
    # The ID and range of a sample spreadsheet.
    SAMPLE_SPREADSHEET_ID = 'id...'
    SAMPLE_RANGE_NAME = 'リスト!A1500:M'
    
    def main():
        """Shows basic usage of the Sheets API.
        Prints values from a sample spreadsheet.
        """
        creds = None
        # The file token.pickle stores the user's access and refresh tokens, and is
        # created automatically when the authorization flow completes for the first
        # time.
        if os.path.exists('token.pickle'):
            with open('token.pickle', 'rb') as token:
                creds = pickle.load(token)
        # If there are no (valid) credentials available, let the user log in.
        if not creds or not creds.valid:
            if creds and creds.expired and creds.refresh_token:
                creds.refresh(Request())
            else:
                flow = InstalledAppFlow.from_client_secrets_file(
                    'credentials.json', SCOPES)
                creds = flow.run_local_server()
            # Save the credentials for the next run
            with open('token.pickle', 'wb') as token:
                pickle.dump(creds, token)
    
        service = build('sheets', 'v4', credentials=creds)
    
        # Call the Sheets API
        sheet = service.spreadsheets()
        result = sheet.values().get(spreadsheetId=SAMPLE_SPREADSHEET_ID,
                                    range=SAMPLE_RANGE_NAME).execute()
        values = result.get('values', [])
    
        if not values:
            print('No data found.')
        else:
            arr = []
            for row in values:
              try:
                if row[11] and row[12]:
                  pass
              except:
                arr.append(row)
        print(json.dumps(arr))
    if __name__ == '__main__':
        main()
    
```
CC BY-SA 4.0
2019-07-06T07:49:02.117
56447
2019-07-06T09:55:16.160
2019-07-06T09:55:16.160
32180
32180
question
ajax google-chrome
chrome拡張内からlocalhostへのアクセス　そのままコードが返ってくる