Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AJAX调用后未执行JS_Javascript_Php - Fatal编程技术网

Javascript AJAX调用后未执行JS

Javascript AJAX调用后未执行JS,javascript,php,Javascript,Php,我正在开发一个小型天气应用程序。在前端,我有一个搜索栏,每当用户键入内容时,我都会加载一个城市列表,该列表与用户输入的值相匹配,并按人口排序,限制为10 这个功能现在正在发挥作用:一个ul的li城市正在生成 现在看来我的app.js被AJAX锁定了,我试图为每一个li元素onclick添加一个事件监听器,但它根本不执行。似乎这是由于异步/同步造成的 index.php fetch.php 从我看到的情况来看,您之前正在调用addEventListener。cities select exists

我正在开发一个小型天气应用程序。在前端,我有一个搜索栏,每当用户键入内容时,我都会加载一个城市列表,该列表与用户输入的值相匹配,并按人口排序,限制为10

这个功能现在正在发挥作用:一个ul的li城市正在生成

现在看来我的app.js被AJAX锁定了,我试图为每一个li元素onclick添加一个事件监听器,但它根本不执行。似乎这是由于异步/同步造成的

index.php

fetch.php


从我看到的情况来看,您之前正在调用addEventListener。cities select exists加载页面->尝试循环。cities select但它不存在。设置.innerHTML后,需要在$.Ajaxsuccess函数中添加事件侦听器

const search=document.querySelectorcity-search; const results=document.querySelector.result; //工作 search.addEventListenerkeyup,e=>{ 让城市=搜索.value; 如果城市!={ 负荷城市化; } }; //工作 const loadCities=城市=>{ $.ajax{ url:config/fetch-cities.php, 方法:获取, async:true, 数据:{ 查询:城市 }, 成功:functiondata{ results.innerHTML=数据; const cities=document.queryselectoral.cities-select; cities.forEachcity=>{ city.addEventListenerclick,e=>{ console.loghello世界; } } } }; }
从我看到的情况来看,您之前正在调用addEventListener。cities select exists加载页面->尝试循环。cities select但它不存在。设置.innerHTML后,需要在$.Ajaxsuccess函数中添加事件侦听器

const search=document.querySelectorcity-search; const results=document.querySelector.result; //工作 search.addEventListenerkeyup,e=>{ 让城市=搜索.value; 如果城市!={ 负荷城市化; } }; //工作 const loadCities=城市=>{ $.ajax{ url:config/fetch-cities.php, 方法:获取, async:true, 数据:{ 查询:城市 }, 成功:functiondata{ results.innerHTML=数据; const cities=document.queryselectoral.cities-select; cities.forEachcity=>{ city.addEventListenerclick,e=>{ console.loghello世界; } } } }; }
浏览器是否已冻结,即选项卡崩溃,大多数浏览器都会询问您是否要终止相关脚本,还是代码根本不执行?这是一种巨大的差异。@James你想迭代什么?$。ajax不会返回loadCities任何可以迭代的内容。我会将我的问题改为“代码根本不执行”浏览器是否冻结,即选项卡崩溃,大多数浏览器会询问您是否要终止相关脚本,或者代码根本不执行?这是一种巨大的差异。@James你想迭代什么?$。ajax不会返回到loadCities,也不会返回任何可以迭代的内容
<body>
    <?php require_once("config/db.php")?>
    <h2>Weather</h2>
    <input type="text" name="city-search" class="city-search" id="city-search">
    <ul class="result f32">
  ...
</ul>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    <script src="scripts/app.js"></script>
</body>
const search = document.querySelector("#city-search");
const results = document.querySelector(".result");
const listCities = document.querySelectorAll(".cities-select");


// works
search.addEventListener("keyup", e =>{
    let city = search.value;
    if(city != ""){
        loadCities(city);
    }
});


// works
const loadCities = (city) => {
    $.ajax({
        url: "config/fetch-cities.php",
        method: "GET",
        async: true,
        data: {
            query: city
        },
        success: function(data){
            results.innerHTML = data;
        }
    });
}

// does not execute 
listCities.forEach(city => {
    city.addEventListener("click", e =>{
        console.log("hello world");
    })
})
<?php 
require("db.php");

if(isset($_GET["query"])){
    $search = $_GET["query"];
    $results = $conn->prepare("SELECT * FROM cities WHERE city LIKE '{$search}%' 
    ORDER BY population DESC LIMIT 5");
} 

$results->execute();
foreach ($results as $row) {
    echo '<li class="cities-select">
     <div> '.$row["city"].' </div>
     <div> '.$row["country"].' </div>
     </li>';
}
?>