Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.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进程顺序_Javascript_Php_Ajax - Fatal编程技术网

Javascript Ajax进程顺序

Javascript Ajax进程顺序,javascript,php,ajax,Javascript,Php,Ajax,在这个项目中,我尝试在主php中使用Javascript中的url,将Ajax转换为后端php调用getWeather.php。它将从url获取数据并将其返回到Javascript 然而,在Ajax发布之后,我一直丢失变量(未定义)。 所以我打印了结果以查看,当我尝试将php返回结果分配给Javascript变量时,我发现Ajax返回值还没有完成 在我的脚本中,单击按钮时: function post (inputString) { var result; va

在这个项目中,我尝试在主php中使用Javascript中的url,将Ajax转换为后端php调用getWeather.php。它将从url获取数据并将其返回到Javascript 然而,在Ajax发布之后,我一直丢失变量(未定义)。 所以我打印了结果以查看,当我尝试将php返回结果分配给Javascript变量时,我发现Ajax返回值还没有完成

在我的脚本中,单击按钮时:

 function post (inputString) {
        var result;
        var url ="http://api.openweathermap.org/data/2.5/weather?lat=42.5559287&lon=-92.84954249999998&lang=en&units=metric&appid=MY_API_KEY";

        $.post("getWeather.php",
        {
            postData: url,
        },
        function(data, status){
            alert("Data: " + data + "\nStatus: " + status);
            // console.log("Data: " + data + "\nStatus: " + status);
            //CONSOLE #1
            console.log("url Input: \n" + url + " \n\ndata : \n" + data);
            result = data;
        });
        //CONSOLE #2
        console.log("url Input: \n" + url + " \n\nResult : \n" + result);
    }
在获取postData的PHP中:

    $s = $_REQUEST['postData'];
echo getWeather_PHP($s);

function getWeather_PHP($url) {
    $contents = file_get_contents($url);
    $clima=json_decode($contents);
    $temp_max=$clima->main->temp_max;
    $temp_min=$clima->main->temp_min;
    $icon=$clima->weather[0]->icon.".png";
    //how get today date time PHP :P
    $today = date("F j, Y, g:i a");
    $cityname = $clima->name; 
    $date =  $cityname . " - " .$today . "<br>";
    $max = "Temp Max: " . $temp_max ."&deg;C<br>";
    $min =  "Temp Min: " . $temp_min ."&deg;C<br>";
    $output = $date." ".$max." ".$min;
    $output = (string)$output;
    // echo $output;
    return $output;
}
$s=$\u请求['postData'];
echo getWeather_PHP($s);
函数getWeather_PHP($url){
$contents=file\u get\u contents($url);
$clima=json_decode($contents);
$temp\u max=$clima->main->temp\u max;
$temp\u min=$clima->main->temp\u min;
$icon=$clima->weather[0]->icon..png;
//如何获取今天日期时间PHP:P
$today=日期(“fj,Y,g:ia”);
$cityname=$clima->name;
$date=$cityname.“-”$today.“
”; $max=“Temp max:”.$Temp_max.°;C
”; $min=“Temp min:”.$Temp_min.°;C
”; $output=$date.“$max.”.$min; $output=(字符串)$output; //echo$输出; 返回$output; }
最后的结果是: 最后的结果是: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ //控制台#2 url输入: http://

结果: 未定义

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

//控制台#1 ajaxTest.php:24 url输入: http://

数据: 阿灵顿-2018年10月1日,晚上8:12最高温度:13.9摄氏度最低温度:12摄氏度

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

因此,控制台2比控制台1提前完成 看来我不能正确得到结果的错误??? 我该如何解决这个问题? 或者有没有丘疹样的方式来做同样的事情


感谢您的帮助

Ajax是异步的。这意味着代码执行将在不等待响应的情况下继续进行,因此,CONSOLE#2将在CONSOLE#1之前触发。传递给
$.post
的回调函数将在请求完成后启动,您应该使用它根据从请求接收的数据执行任何操作。此外,最好添加一些错误处理,以防请求因任何原因失败。此外,您现在还可以使用带有
$.post
的承诺,这可能有助于链接多个请求并轻松处理所有错误。有关->

的更多详细信息,请尝试将AJAX函数转换为一个函数。通过这种方式,您可以执行AJAX请求,等待获取数据,然后在代码中的其他地方使用它

var promise = $.post("getWeather.php").done(function(data, err) {
  return data;
});

promise.then(function(data) {
  console.log(data)
});

您的
结果似乎只在AJAX请求的回调中可用。控制台2肯定会出现在控制台1之前。控制台1在PHP服务器响应之后运行,控制台2在返回之前运行。对于Ajax请求的结果,您需要做的任何事情都需要通过回调函数(现在包含控制台1)来完成。您点了一个比萨饼,挂断电话后,您尝试吃比萨饼,但什么也不吃。(控制台1)。你点比萨饼,你在前门等,直到它送到,门铃响了,你拿到比萨饼吃了。(控制台2)欢迎来到异步方法的世界。