function addphoto()
{
var ajaxRequest = initAjax();
if (ajaxRequest == false)
{
return false;
}
// Return Ajax result when the state changes later
ajaxRequest.onreadystatechange = function()
{
if(ajaxRequest.readyState == 4)
{
alert(ajaxRequest.responseText);
return ajaxRequest.responseText;
}
}
// Capture form elements
var values = {
"category" : encodeURIComponent(document.addphoto.category.options[document.addphoto.category.selectedIndex].value),
"photo_title" : encodeURIComponent(document.addphoto.photo_title.value),
"photo_descrip" : encodeURIComponent(document.addphoto.photo_descrip.value)
}
var queryString = '?', i = 0;
for (var key in values)
{
if (i != 0)
{
queryString += '&'
}
queryString += key + '=' + values[key];
i++;
}
// Execute Ajax
ajaxRequest.open("POST", "ajaxcheckform.php" + queryString, true);
ajaxRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
ajaxRequest.setRequestHeader("Content-length", queryString.length);
ajaxRequest.setRequestHeader("Connection", "close");
ajaxRequest.send(null);
}
function ajaxCheckform(formname)
{
var response = addphoto(); // <--This is undefined and not sure why
var responseObj = JSON.parse(response);
if (responseObj.success == 1)
{
// Successful form!
alert(responseObj.success_text);
}
else
{
// Error!
alert(responseObj.error);
}
}
我确定我必须在某个地方犯一些基本错误,但我找不到它。在这个脚本中,ajaxCheckform()是一个执行几个类似函数之一的函数。上面,我添加了addphoto(),这是我需要的几个函数之一。
另一方面,我很想知道我可以动态调用一个函数。 addphoto()函数将只是当时调用的一个这样的函数,我正在尝试找到一种方法来传递formname作为我需要的函数。我搜索过Stackoverflow和Google。我发现没有任何效果。
注意,我知道jQuery,但我还没有。我需要先使用此功能。
答案 0 :(得分:3)
addphoto()
不是undefined
,而response
未定义。ajaxRequest
addphoto()
是异步的,function addphoto() {...
// Return Ajax result when the state changes later
ajaxRequest.onreadystatechange = function()
{
if(ajaxRequest.readyState == 4)
{
alert(ajaxRequest.responseText);
var responseObj = JSON.parse(ajaxRequest.responseText);
if (responseObj.success == 1) {
// Successful form!
alert(responseObj.success_text);
}
else {
// Error!
alert(responseObj.error);
}
}
}
....
}
function ajaxCheckform(formname) {
addphoto();
}
函数将在请求完成之前返回。
试试这个
{{1}}
答案 1 :(得分:3)
那是因为响应设置为addphoto()
的返回,这没什么。你要做的是在AJAX调用完成后调用ajaxCheckForm
:
// Return Ajax result when the state changes later
ajaxRequest.onreadystatechange = function()
{
if(ajaxRequest.readyState == 4)
{
ajaxCheckform(ajaxRequest.responseText);
}
}
然后您的ajaxCheckform
将使用该数据:
function ajaxCheckform(responseText)
{
var responseObj = JSON.parse(responseText);
if (responseObj.success == 1)
{
// Successful form!
alert(responseObj.success_text);
}
else
{
// Error!
alert(responseObj.error);
}
}
答案 2 :(得分:1)
您无法从事件处理程序(onreadystatechange)返回。
您必须在该事件处理程序中完成工作。
答案 3 :(得分:0)
addphoto()
不返回任何内容(或者更确切地说,返回不一致)... onreadystatechange
事件的处理程序返回值,但没有调用者将接收该json字符串。
我强烈建议你用jquery之类的东西来抽象这些细节...只需按照文档建议使用,这段代码就会简单得多
答案 4 :(得分:0)
您正在向GET
方法发送POST
样式参数列表。
您需要在HTTP请求的正文中发送该字符串。
答案 5 :(得分:0)
var response = addphoto(); // <--This is undefined and not sure why
addphoto()
函数中从不包含return
语句,因此返回undefined
。并且ajaxRequest
是异步的,不会立即返回。