У меня есть два запроса ajax, который отправляет данные на сервер (назовем его Ajax # 1), а затем тот, который использует эти отправленные данные для загрузки материала на передний план end (Ajax # 2).Запрос ajax дает 500 ошибок при вызове из другого запроса ajax
Чтобы убедиться, что Ajax # 2 работает после Ajax # 1, я попытался передать функцию, содержащую # 2, в качестве обратного вызова функции, содержащей # 1, где он вызывается после завершения # 1.
Однако это всегда приводит к ошибке 500.
Ajax # 2 отлично работает на своем собственном (когда он срабатывает при нажатии кнопки), но при вызове из Ajax # 1 он всегда дает ошибку 500.
Любая идея, что я делаю неправильно здесь?
var initialize = function(){
//Load settings config on page load (this works fine)
load_settings_config();
//Should apply settings on button press, and load those new settings to front end
$("#apply-sysconfig-button").click(function(){
apply_settings_config(load_settings_config);
});
//manual load settings button (This works fine)
$("#load-settings-button").click(function(){
load_settings_config();
});
};
apply_settings_config = function(callback){
//Not shown - Grabs user input from html input and select elements and loads into the variable 'settings' to be sent to back end
//Ajax#1
$.ajax({
method: "POST",
contentType: 'application/json',
url: "/applynewsettings",
data: JSON.stringify(settings)
})
.done(function(sysconfig_err_msg){
//prompt user with error message if user input is invalid
$("#static-ip-input-err").html(sysconfig_err_msg);
//This does not work - gives 500 error
callback()
});
};
load_settings_config = function(){
//loads the new/updated settings back to front end
//Ajax#2
$.ajax({
method: "GET",
contentType: 'application/json',
url: "/loadinterfaceinfo"
})
.done(function(interface_info_new){
interface_info = JSON.parse(interface_info_new);
interface_selected = $("#interface-dropdown option:selected").text()
populate_interface_info(interface_selected);
});
};
Обратите внимание, что я также попытался
$("#apply-sysconfig-button").click(function(){
apply_settings_config();
load_settings_config();
});
Что удивительно вызывает нагрузку часто работать, прежде чем применить отделку.
И я пытался вызвать функцию непосредственно из AJAX, как это:
apply_settings_config = function(){
//Not shown - Grabs user input from html input and select elements and loads into the variable 'settings' to be sent to back end
//Ajax#1
$.ajax({
method: "POST",
contentType: 'application/json',
url: "/applynewsettings",
data: JSON.stringify(settings)
})
.done(function(sysconfig_err_msg){
//prompt user with error message if user input is invalid
$("#static-ip-input-err").html(sysconfig_err_msg);
//This does not work - gives 500 error
load_settings_config()
});
};
Что дает такую же ошибку 500.
Кажется, мне не хватает части того, как выполнять обратные вызовы с асинхронными запросами на получение/отправку. Любая помощь будет высоко ценится
EDIT Было предложено, чтобы увидеть бэкенд. Я не уверен, как это поможет в том, что в большинстве случаев оба запроса работают нормально. Только тогда, когда Аякс запросы вложенные, что внешний не работает, но здесь они все равно:
@app.route("/applynewsettings", methods=['POST'])
def apply_new_settings():
global sys_settings
sia_err_msg = ""
if request.method == 'POST':
sys_settings = request.json
sys_settings = convertToASCII(sys_settings)
mtu = sys_settings["mtu"]
ip_address = sys_settings["ip_address"]
subnet_mask = sys_settings["subnet_mask"]
gateway = sys_settings["gateway"]
interface = sys_settings["interface"]
#Not shown - validation and build string to send command
if "sia" in sia_cmd:
cli.sendCmd(sia_cmd)
sia_err_msg = "Sucess!"
print "SEND CMD: "+sia_cmd
else:
print "sia cmd was invalid: "+"'"+sia_cmd+"'"
sia_err_msg = sia_err_msg + "Apply Settings Failed!"
return sia_err_msg
#Sends cmd through telnet cli, parses response, returns to front end
@app.route("/loadinterfaceinfo")
def load_interface_info():
#Sends cmd through telnet cli & parses response
interface_dict = run_cmd(cli,"get_interface_info")
#must encode as json to send to front end
interface_dict = json.JSONEncoder().encode(interface_dict)
#send to front end
return interface_dict
Возможно, вы обнаружите, что такое ошибка 500? Кроме того, не уверен, имеет ли это значение, но ваш URL '/ applynewsetttings', кажется, включает дополнительный« t » – Beno
без какой-либо информации о стороне сервера, которая является источником ошибки, не может помочь значительно –
вместо' data : JSON.stringify (настройки) 'try' data: settings' –