我有两个选择元素,A和B:当A的选择选项发生变化时,B的选项必须相应更新。 A 中的每个元素都隐含 B 中的许多元素,这是一对多的关系(A 包含国家,B 应该包含位于给定国家的城市)。
函数
do_ajax
应运行异步请求:
function do_ajax(elem, mydata, filename)
{
$.ajax({
url: filename,
context: elem,
data: mydata,
datatype: "html",
success: function (data, textStatus, xhr) {
elem.innerHTML = data;
}
});
}
为了更新 B 的选项,我在 A 的
onChange
事件中添加了一个函数调用。以下是触发 onChange 事件(A
)时运行的函数:
function my_onchange(e) // "e" is element "A"
{
var sel_B = ... ; // get select element "B"
// I skipped some code here
// ...
var data = {
'mode': 'filter_city',
'id_A': e[e.selectedIndex]
};
do_ajax(city_sel, data, 'ajax_handler.php');
}
}
我在 JQuery docs 中读到
data
可以是一个数组(键值对)。如果输入以下内容,则会出现错误:
var data = {
'mode': 'filter_city',
'id_A': e[e.selectedIndex]
};
相反,如果我的数据是字符串,我不会收到该错误:
var data = 'mode=filter_city&id_A=' + e[e.selectedIndex];
但我需要变量的“数组版本”,在我的服务器端 php 代码中。
Uncaught TypeError: Illegal invocation
位于“jquery-1.7.2.min.js”文件中,该文件全部被压缩,所以我无法弄清楚哪部分代码引发了错误。
我可以在代码中更改任何设置,以便它接受数据作为关联数组吗?
感谢与 Sarfraz 的交谈,我们可以找到解决方案。
问题是我传递的是 HTML 元素而不是它的值,这实际上是我想要做的(事实上,在我的 php 代码中,我需要该值作为外键来查询我的
cities
表并过滤正确的条目) ).
所以,而不是:
var data = {
'mode': 'filter_city',
'id_A': e[e.selectedIndex]
};
应该是:
var data = {
'mode': 'filter_city',
'id_A': e[e.selectedIndex].value
};
注意:检查 Jason Kulatunga 的 answer,它引用了 JQuery 文档来解释为什么传递 HTML 元素会引起麻烦。
我在发布 FormData 对象时收到此错误,因为我没有正确设置 ajax 调用。下面的设置解决了我的问题。
var myformData = new FormData();
myformData.append('leadid', $("#leadid").val());
myformData.append('date', $(this).val());
myformData.append('time', $(e.target).prev().val());
$.ajax({
method: 'post',
processData: false,
contentType: false,
cache: false,
data: myformData,
enctype: 'multipart/form-data',
url: 'include/ajax.php',
success: function (response) {
$("#subform").html(response).delay(4000).hide(1);
}
});
来自
processData
的 jQuery 文档:
处理数据布尔值
默认:true
默认情况下,作为对象(从技术上讲,字符串以外的任何内容)传递到数据选项的数据将被处理并转换为查询字符串,适合默认内容类型“application/x-www-form-urlencoded” 。如果您想发送 DOMDocument 或其他未处理的数据,请将此选项设置为 false。
来源:http://api.jquery.com/jquery.ajax
看起来您将不得不使用
processData
将数据发送到服务器,或者修改您的 php 脚本以支持查询字符串编码参数。
我在 JQuery 文档中读到数据可以是数组(键值对)。 如果输入以下内容,则会出现错误:
这是对象而不是数组:
var data = {
'mode': 'filter_city',
'id_A': e[e.selectedIndex]
};
您可能想要:
var data = [{
'mode': 'filter_city',
'id_A': e[e.selectedIndex]
}];
最近遇到了同样的问题,通过添加
traditional: true,
解决了
请按照以下步骤解决此问题:
$.ajax({
url: 'https://your-api-endpoint',
type: 'post',
data: new formData(this),
processData: false,
contentType: false,
success: function(response) {
console.log(response)
}
})
你必须使用 processData: false 和 contentType: false 这两行。你的问题将会得到解决。
我遇到了同样的问题,我可以按如下方式纠正它。
var formData = new FormData(document.getElementById('form_id'));
$.ajax({
type: 'POST',
url: '/Settings/de_acc',
data: formData,
cache: false,
contentType: false,
processData: false,
success: function(res){
console.log(res);
}
})
我的
illegal invocation
上的 $.getJSON
错误是由于将 undefined
作为 data
对象的值之一传递而引起的。修复解决了错误。
function do_ajax(elem, mydata, filename)
{
$.ajax({
url: filename,
context: elem,
data: mydata,
**contentType: false,
processData: false**
datatype: "html",
success: function (data, textStatus, xhr) {
elem.innerHTML = data;
}
});
}
Ajax 不允许使用 JSON 对象作为数据。使用
JSON.stringify()
可能会解决该问题。像这样的东西:
function do_ajax(elem, mydata, filename)
{
$.ajax({
url: filename,
context: elem,
data: JSON.stringify(mydata), //Here's the change
datatype: "html",
success: function (data, textStatus, xhr) {
elem.innerHTML = data;
}
});
}
JQUERY 更改: 在你的 JQUERY 上,你需要将其放入以使你的数据作为数组发送
JSON.stringify(yourArr);
Laravel 变更: 那么你需要在你的 LARAVEL 控制器上执行此操作才能正确获取数组(就像 php 数组一样):
json_decode($request->theArray);
$.ajax({
url:"",
type: "POST",
data: new FormData($('#uploadDatabaseForm')[0]),
contentType:false,
cache: false,
processData:false,
success:function (msg) {}
});
试试这个:
$.ajax({
url:"",
type: "POST",
data: new FormData($('#uploadDatabaseForm')[0]),
contentType:false,
cache: false,
processData:false,
success:function (msg) {}
});