我有一个简单的jQuery Ajax帖子调用有效。产品已生成并添加到购物车。 我确实找到了很多答案,但是似乎没有一个答案。
但是我无法在我的JS代码中访问响应内容(帖子ID)本身。 在下面的代码中(在注释中),我尝试了几次尝试都无济于事。
我想念什么?
Ajax发布请求:
jQuery.post(
ts_woo.ajax_url,
{'action': 'do_ts_woo',
'order': orderfilename,
'tilesize': globalTileSize,
'board': urlAtts,
'table': table
},
function(data) {
console.log("type of response="+ typeof data + " string=" + data); // data is a string but does not display it.
var response = jQuery.parseJSON(JSON.stringify(data));
console.log("do_ts_woo. Got id="+response); // undefined & so is response.id
pid = response;
if(pid>0){
//pid = response['id'];
console.log("do_ts_woo. SUCCESS response="+pid);
alert('Add to cart: ' + response.id);
ts_iframe(shopdomain + "/cart/?add-to-cart="+pid);
} else {
// ALWAYS end up here while all was successful...
console.log("do_ts_woo. FAILURE response="+response.id);
}
return false;
}
).done(function(response) {/* alert( "done:"+response );*/})
.fail(function(msg) {alert( "error msg="+msg );})
.always(function(response) {
//console.log("do_ts_woo. ALWAYS respone.id="+response.id); SAME PROBLEM HERE
});
这是PHP代码
$pid = generate_woo_product("ts-".date("Ymd_His"), $product_price[1], $pimage, $allTable); // PRODUCT is GENERATED
error_log("pid =". $pid);
if ($pid > 0){
error_log ("product pid=".$pid." generated successfully");
echo $pid;
//tried wp_send_json_success($pid);
//tried wp_send_json_success(array('success' => true, 'id' => $pid));
} else error_log("do_ts_woo: FAIL generate_woo_product returned".$pid);
wp_die();
答案 0 :(得分:1)
请尝试使用
wp_send_json(['pid' => $pid]);
exit;
代替echo
然后使用
访问js中的$ piddata.pid
请在不使用data.pid
的情况下使用JSON.parse
,因为在这种情况下,数据必须是对象
如果没有,请考虑将此代码添加到您的functions.php中。
add_action( 'rest_api_init', 'salient_child_rest_api_init' );
function salient_child_rest_api_init() {
register_rest_route(
'namespace/v1',
'/example',
[
'methods' => WP_REST_Server::CREATABLE,
'callback' => 'salient_child_process_example_endpoint',
]
);
}
function salient_child_process_example_endpoint() {
// your logic ...
$data = [
'pid' => 1
]; // example data for testing if it is working
return new WP_REST_Response( $data, 200 );
}
并以此更改您的jQuery.post
jQuery.post(
{
url: `${document.location.origin}/wp-json/namespace/v1/example`,
data: {
'action': 'do_ts_woo',
'order': orderfilename,
'tilesize': globalTileSize,
'board': urlAtts,
'table': table
},
xhrFields: {
withCredentials: true
}
})
.done(function (data) {
const pid = data.pid;
if (pid > 0) {
console.log("do_ts_woo. SUCCESS response=" + pid);
alert('Add to cart: ' + response.id);
ts_iframe(shopdomain + "/cart/?add-to-cart=" + pid);
} else {
console.log("do_ts_woo. FAILURE response=" + response.id);
}
return false;
})
.fail(function (msg) {
alert("error msg=" + msg);
})
.always(function (response) {
});
否则-可能会有PHP警告修改带有预期消息的响应输出并破坏响应数据。