返回Javascript变量的AJAX调用

时间:2016-09-21 14:56:23

标签: javascript php jquery ajax

努力将AJAX结果变量返回给JavaScript

请注意,以下$.ajax来电是同步async: false)。

Ajax Call

function getState(callback) {
    $.ajax({
        url: 'getSearchState.php',
        data: { "state": callback },
        type: 'GET',
        async: false,
        success: function(result){
            alert(result);
        },
        error: function(result) {
        alert(result);
      }
    });
}

Ajax PHP

<?php
    // Database Setup and Query

while ($row = $xxxxx->fetch(PDO::FETCH_ASSOC)) {
    $StateVal = $row['State'];
}

return $StateVal;
?>

Javascript调用函数

var URL = District.trim();  
var StateURL = getState(URL);

它可以从函数中修改URL,但不会返回任何内容。

任何帮助都会很棒!

2 个答案:

答案 0 :(得分:2)

客户端和服务器端的代码都存在问题。

客户端:

您的getState永远不会返回任何内容,因此undefined StateURLfunction getState(state) { var result; // <=== Where we'll put our result $.ajax({ url: 'getSearchState.php', data: {"state": state}, type: 'GET', async: false, success: function(data) { // Remember the result; result = data; }, error: function() { result = /*...whatever you want to use to signal an error */; } }); // Return the result return result; } 以外的其他任何内容都不会感到惊讶。

不要使用同步ajax 。它造成了可怕的用户体验。但是,如果你真的,真的想继续使用它,那么你将如何:

state

请注意,我将参数名称更改为$.ajax,因为它不是回调。

但是,请不要使用同步ajax。而是使用回调或承诺。

承诺:function getState(state) { var result; // <=== Where we'll put our result $.ajax({ url: 'getSearchState.php', data: {"state": state}, type: 'GET', async: false, success: function(data) { // Remember the result; result = data; }, error: function() { result = /*...whatever you want to use to signal an error */; } }); // Return the result return result; } 已经返回一个承诺,所以直接返回:

state

请注意,我将参数名称更改为function getState(state) { return $.ajax({ url: 'getSearchState.php', data: {"state": state}, type: 'GET' }); } ,因为它不是回调。

但是,请不要使用同步ajax。而是使用回调或承诺。

无极:

getState(URL)
    .done(function(StateURL) {
        // Use it
    })
    .fail(function() {
        // Failed
    });

用法:

function getState(state, callback) {
    $.ajax({
        url: 'getSearchState.php',
        data: {"state": state},
        type: 'GET',
        success: function(data) {
            // Call the callbback with the result
            callback(data);
        },
        error: function() {
            // Call the callback with an error
            callback(/*...whatever you want to use tosignal an error */);
        }
    });
}

回调:

getState(URL, function(StateURL) {
    // Use it, check for error
});

用法:

echo

服务器端:

作为RiggsFolly pointed out,您从您的PHP代码中返回字符串。但那不会输出它。要在客户端使用它,您需要输出它(例如,json_encode和类似的)。为了让它能够被JavaScript轻松使用,您可能希望echo json_encode($stateVal); 确保它能够以JavaScript格式理解它:

success

然后在done(或JSON.parse)函数中,使用result = JSON.parse(data);

NSFetchedResultsController *frc = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:NULL cacheName:@"myCache"];

答案 1 :(得分:-4)

这是jQuery,在这种情况下,您可以在该上下文中指定上下文和成功函数集变量....稍微粗略的解决方案,但它将起作用。另外看看ES6的箭头功能和承诺,它可以帮助你很多,并为你提供有关整个问题的新视角。

还有一件事!!默认情况下,Ajax是异步的,所以当数据准备就绪时你需要以某种方式通知你的StateURL(这里再次承诺给你服务)