$.ajax(0,jQuery Ajax显示0而不是Array(jQuery Ajax showing 0 instead of Array)

本文介绍了一个开发者在使用jQuery的Ajax发送POST请求时遇到的问题,即返回的数据被解析为0而非预期的数组。作者提供了通过JSON.stringify序列化对象并设置content-type的解决方案,以确保正确地发送和解析JSON数据。
摘要由CSDN通过智能技术生成

jQuery Ajax显示0而不是Array(jQuery Ajax showing 0 instead of Array)

我正在尝试在数组中推送json,但是当我用Ajax发送params时,它将0而不是Array ...

不知道我怎么摆脱它..如果有人知道如何解决这个问题我会非常感激!

var $selector = $(this).find('.button-selector');

var $element = $(this).find('.button-type');

var $attr = $(this).find('.selector ul li.active').attr('type');

var $text = $(this).find('textarea').val();

var $buttons = [];

$selector.each(function(){

var $titleBtn = $(this).find('input[name=button-title]').val();

if($attr == 'block'){

var $payload = "";

var $value = $element.find('.block-select select').val();

if($value == 1) {

$payload = "JOIN_CONVERSATION_"+story_id+"";

} else if ($value == 2) {

$payload = "NEXT_BITE_"+story_id+"";

} else if ($value == 3) {

$payload = "INSTANT_ARTICLE_"+story_id+"";

}

button = {

"type": "postback",

"title": $titleBtn,

"payload": $payload

};

$buttons.push(button)

} else if($attr == 'url') {

var $url = $element.find('.url-select input[type=url]').val();

var $webView = $element.find('.url-select select').val();

button = {

"type": "web_url",

"url": $url,

"title": $titleBtn,

"webview_height_ratio": $webView

};

$buttons.push(button)

}

});

$.ajax({

async: false,

type: 'POST',

url: '/variable',

dataType: 'json',

data: {

"element":{

"notification_type": notification_type,

"message": {

"attachment": {

"type": "template",

"payload": {

"template_type": "button",

"text": $text,

"buttons": $buttons

}

}

}

}

}

});

按钮的输出是:

"buttons"=>{"0"=>{"type"=>"postback", "title"=>"rwerwe", "payload"=>"JOIN_CONVERSATION_256"}}

Intead:

"buttons"=>[{"type"=>"postback", "title"=>"rwerwe", "payload"=>"JOIN_CONVERSATION_256"}]

I'm trying pushing json inside of array, but when i send the params with Ajax it put 0 instead of Array...

Not really sure how do i get rid of it.. If anyone have any idea how to fix that I'll really appreciate it!

var $selector = $(this).find('.button-selector');

var $element = $(this).find('.button-type');

var $attr = $(this).find('.selector ul li.active').attr('type');

var $text = $(this).find('textarea').val();

var $buttons = [];

$selector.each(function(){

var $titleBtn = $(this).find('input[name=button-title]').val();

if($attr == 'block'){

var $payload = "";

var $value = $element.find('.block-select select').val();

if($value == 1) {

$payload = "JOIN_CONVERSATION_"+story_id+"";

} else if ($value == 2) {

$payload = "NEXT_BITE_"+story_id+"";

} else if ($value == 3) {

$payload = "INSTANT_ARTICLE_"+story_id+"";

}

button = {

"type": "postback",

"title": $titleBtn,

"payload": $payload

};

$buttons.push(button)

} else if($attr == 'url') {

var $url = $element.find('.url-select input[type=url]').val();

var $webView = $element.find('.url-select select').val();

button = {

"type": "web_url",

"url": $url,

"title": $titleBtn,

"webview_height_ratio": $webView

};

$buttons.push(button)

}

});

$.ajax({

async: false,

type: 'POST',

url: '/variable',

dataType: 'json',

data: {

"element":{

"notification_type": notification_type,

"message": {

"attachment": {

"type": "template",

"payload": {

"template_type": "button",

"text": $text,

"buttons": $buttons

}

}

}

}

}

});

The output for buttons is:

"buttons"=>{"0"=>{"type"=>"postback", "title"=>"rwerwe", "payload"=>"JOIN_CONVERSATION_256"}}

Intead of:

"buttons"=>[{"type"=>"postback", "title"=>"rwerwe", "payload"=>"JOIN_CONVERSATION_256"}]

原文:https://stackoverflow.com/questions/40943408

更新时间:2020-02-06 18:35

最满意答案

我希望这能解决你的问题。

您需要使用JSON.stringify首先将对象正确序列化为JSON,然后指定contentType: "application/json"以便您的服务器了解它的JSON并将其反序列化。 这应该是诀窍:

var jsonData = {

"element":{

"notification_type": notification_type,

"message": {

"attachment": {

"type": "template",

"payload": {

"template_type": "button",

"text": $text,

"buttons": $buttons

}

}

}

}

};

$.ajax({

async: false,

type: 'POST',

url: '/variable',

contentType: 'application/json',

dataType: 'json',

data: JSON.stringify(jsonData)

});

I hope this should fix your case.

You need to use JSON.stringify to first properly serialize your object to JSON, and then specify the contentType: "application/json" so your server understands it's JSON and deserialize it back. This should do the trick:

var jsonData = {

"element":{

"notification_type": notification_type,

"message": {

"attachment": {

"type": "template",

"payload": {

"template_type": "button",

"text": $text,

"buttons": $buttons

}

}

}

}

};

$.ajax({

async: false,

type: 'POST',

url: '/variable',

contentType: 'application/json',

dataType: 'json',

data: JSON.stringify(jsonData)

});

相关问答

您的问题的简单答案是您在模型中复制方法意味着您在模型中定义方法两次或模型代码中存在syntex错误。 尝试在没有ajax的情况下调用模型方法进行测试,然后你会看到错误。 Turns out my script was incorrect. For future reference to fellow noobies like myseleft to jquery and ajax. If you want your script to start on page open, wrap your c

...

gogic - 做一个更简单的例子来测试,然后从中构建。 $(function() {

var serialized = JSON.stringify({"msg" : "Hello!"});

$.ajax({

url: myURL,

type: 'POST',

data: serialized,

contentType: 'json',

dataType: 'html'

}).done(function(obj) {

$('div').html(

...

Maby这会有帮助吗? jQuery JSON 它会变成这样的: for (var i in data.) {

$('#columns-check').prepend('Line: ' + data.[i]);

}

Maby this will help? jQuery JSON It will become something like this: for (var i in data.) {

$('#column

...

$( function() {

$.ajax( {

url: 'ajax.xml',

type: 'GET',

dataType: 'xml',

success: function( response ) {

var books = $( response ).find( 'book' );

var list = $( '#booklist' );

$( books ).each( function() {

...

看过有问题的API后 ,您所追求的值仅仅是元素节点的属性。 您可以使用attr()直接访问这些属性,而不是使用find() ,如下所示: var strTitle = $(this).attr('web-title'),

strUrl = $(this).attr('web-url'),

strPubdate = $(this).attr('web-publication-date');

这是一个小提琴 。 Having had a look at the API in ques

...

success: function(d) {

var htmlstring='';

$.each(d,function(i,e) {htmlstring+=e+'
';});

$('#code').text(htmlstring);

},

success: function(d) {

var htmlstring='';

$.each(d,function(i,e) {htmlstring+=e+'
';});

$('#code')

...

JSON必须是单片字符串。 您不能在单个响应中输出四个单独的JSON结构。 例如 $x = array('foo');

$y = array('bar');

$z = array('baz');

echo json_encode($x);

echo json_encode($y);

echo json_encode($z);

会寄 ['foo']['bar']['baz']

穿过电线。 这不是语法上有效的JSON,只会在接收端产生一个解析错误。 如果要以JSON形式发送4个不同的数据块,则需

...

我希望这能解决你的问题。 您需要使用JSON.stringify首先将对象正确序列化为JSON,然后指定contentType: "application/json"以便您的服务器了解它的JSON并将其反序列化。 这应该是诀窍: var jsonData = {

"element":{

"notification_type": notification_type,

"message": {

"attachment": {

...

创建项目对象时会发生什么: var items = [

{

code: '1234'

, checked: true

}

,{

code: '4568'

, checked: false

}

];

我认为问题是当你应该创建一个标准对象时,你正在用你的内部对象创建一个数组。 What happens when you create your items object like this: var ite

...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值